应用程序清单和程序集清单之间有什么区别?每个人在哪里使用?在.dll或.exe资源中找到了哪两个? (或两者都可以吗?)。
很抱歉,如果它一次出现太多问题,但如果有人能向我解释这个问题,那将非常有帮助。我问这个的原因是我希望能够从嵌入在PE文件中的清单中提取信息。我找到了这些清单的描述,但有两个,我不确定应该遵循哪一个:
Application manifest description
Assembly manifest description
编辑:不,我不想使用任何API调用。我自己写的都是。
答案 0 :(得分:3)
简而言之,两者是完全不同的概念,不幸的是名字相似。
应用程序清单是嵌入在PE二进制文件(托管或本机)中的XML文件,它向操作系统加载程序提供有关SxS程序集依赖关系,所需高程等内容的说明,OS版本兼容性等。
程序集清单是CLI程序集中的一个部分,说明托管程序集的依赖项,组成程序集的文件,程序集的公钥,类型导出, CLR标志,等等。您可以使用ILDASM.exe或大多数.NET反编译器检查程序集的清单。
ECMA 335(CLI规范)的相关摘录,第I.9.6节:
清单:每个程序集都有一个声明哪些文件的清单 弥补装配,导出什么类型,以及其他什么 程序集是解析内部类型引用所必需的 部件。正如CLI组件通过元数据自我描述一样 CLI组件,也就是通过它们自我描述的程序集 体现。当单个文件组成一个程序集时,它包含两个文件 描述程序集中定义的类型的元数据和 描述程序集本身的元数据。当程序集包含时 多个带有元数据的文件,每个文件都描述了 文件中定义的类型(如果有),以及其中一个文件 包含描述程序集的元数据(包括 其他文件,加密哈希值以及导出的类型 在集会之外)。
请注意:
答案 1 :(得分:0)
似乎我必须遵循两者:
作为DLL中的资源,程序集 可供私人使用 DLL。装配清单不能 被包含在EXE中作为资源。 EXE文件可以包括应用程序 表现为资源。
(找到的信息here)。因此,似乎可执行文件在资源中嵌入了应用程序清单,库(DLL)具有程序集清单。由于它们都是PE(可移植可执行文件),我需要解析这两种类型。
答案 2 :(得分:0)
应用程序清单通常嵌入在EXE中,具有讽刺意味的是Dlls,并指定EXE或DLL所依赖的程序集。
程序集清单可以嵌入到DLL中,也可以作为单独的文件存储在磁盘上,并为程序集提供标识和资源列表:是dll,无需激活的com对象和窗口类。
如果程序集的名称是dll的名称,那么相同的清单最终将同时用作确定dll依赖关系的应用程序清单,以及程序集清单以查看程序集导出的内容。对于本机程序集来说,这个选项看起来真的很疯狂,通常最好在company.product.module的行中创建一个具有复杂名称的程序集,然后只需要一个简单的module.dll作为其一个条目。