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