3

应用程序清单和程序集清单有什么区别?每一个用在什么地方?在 .dll 或 .exe 资源中找到这两者中的哪一个?(或者两者都可以?)。

很抱歉,如果一次有太多问题,但如果有人可以向我解释这一点,那将非常有帮助。我问这个的原因是我希望能够从嵌入在 PE 文件中的清单中提取信息。我找到了清单的这些描述,但是有两个,我不确定要遵循哪一个:

应用程序清单描述
程序集清单描述

编辑:不,我不想使用任何 API 调用。我都是自己写的。

4

3 回答 3

3

简而言之,这两者是完全不同的概念,不幸的是名称相似。

应用程序清单是嵌入或与 PE 二进制文件(托管或本机)一起分发的 XML 文件,向操作系统加载程序提供有关诸如 SxS 程序集依赖性、所需提升、操作系统版本兼容性等内容的指令。

程序集清单是 CLI 程序集中的一个部分,说明托管程序集的依赖项、组成程序集的文件、程序集的公钥、类型导出、CLR 标志等。您可以使用 ILDASM.exe 或大多数 .NET 反编译器检查程序集的清单。

ECMA 335(CLI 规范)第 I.9.6 节的相关摘录:

清单:每个程序集都有一个清单,该清单声明了哪些文件构成了程序集,导出了哪些类型,以及解析程序集中的类型引用需要哪些其他程序集。正如 CLI 组件通过 CLI 组件中的元数据进行自我描述一样,程序集也通过其清单进行自我描述。当单个文件组成程序集时,它既包含描述程序集中定义的类型的元数据,也包含描述程序集本身的元数据。当一个程序集包含多个带有元数据的文件时,每个文件都描述文件中定义的类型(如果有),其中一个文件还包含描述程序集的元数据(包括其他文件的名称、它们的加密哈希,以及它们在程序集之外导出的类型)。

注意:

  • 所有托管程序集都必须具有程序集清单、可执行文件和类似的库;
  • 所有本机二进制文件、可执行文件和库都可能具有应用程序清单。
于 2013-11-10T14:53:45.907 回答
1

看来我将不得不遵循两者:

作为 DLL 中的资源,程序集可供 DLL 私人使用。程序集清单不能作为资源包含在 EXE 中。EXE 文件可以包括应用程序清单作为资源。

(在这里找到的信息)。因此,似乎可执行文件具有嵌入在资源中的应用程序清单,而(DLL)具有程序集清单。由于它们都是 PE(便携式可执行文件),我需要解析这两种类型。

于 2010-08-19T09:03:00.463 回答
1

应用程序清单通常嵌入在 EXE 中,具有讽刺意味的是,还嵌入在 Dll 中,并指定 EXE 或 DLL 所依赖的程序集。

程序集清单可以嵌入 DLL 中,或者作为单独的文件在磁盘上,并为程序集提供标识和资源列表:作为 dll、无激活 com 对象和窗口类。

如果程序集的名称是 dll 的名称,那么同一个清单最终将用作确定 dll 依赖关系的应用程序清单和用于查看程序集导出内容的程序集清单。这个选项对于本机程序集来说真的很疯狂,通常最好创建一个具有复杂名称的程序集,例如 company.product.module,然后只使用一个简单的 module.dll 作为其一个条目。

于 2011-01-23T20:53:58.717 回答