第 17 章 装配 装配
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
程序集是.NET 中部署的基本单元,也是所有类型的容器。程序集包含已编译的类型及其中间语言(IL)代码、运行时资源,以及有助于版本控制和引用其他程序集的信息。程序集还定义了类型解析的边界。在 .NET 中,程序集由一个扩展名为.dll的文件组成。
备注
在 .NET 中构建可执行应用程序时,最终会生成两个文件:一个程序集(.dll)和一个适合目标平台的可执行启动器(.exe)。
这与 .NET Framework 中的情况不同,.NET Framework 会生成一个可移植的可执行(PE) 程序集。PE 的扩展名为.exe,既是程序集,也是应用程序启动器。PE 可同时针对 32 位和 64 位版本的 Windows。
本章中的大多数类型来自以下命名空间:
System.Reflection System.Resources System.Globalization
大会的内容
一个组件包含四种东西:
- 装配清单
- 为 CLR 提供信息,如程序集名称、版本及其引用的其他程序集
- 应用程序清单
- 为操作系统提供信息,例如应如何部署程序集以及是否需要管理权限
- 编译类型
- 汇编中定义的类型的编译 IL 代码和元数据
- 资源
- 嵌入组件中的其他数据,如图像和可本地化的文本
其中只有程序集清单是强制性的,尽管程序集几乎总是包含已编译的类型(除非它是资源程序集。 参见"资源和卫星程序集")。
大会宣言
装配清单有两个作用:
-
它描述了到托管主机环境的装配。
-
它是程序集中模块、类型和资源的目录。
因此,程序集是自描述的。用户可以发现程序集的所有数据、类型和功能,而不需要额外的文件。
备注
程序集清单不是明确添加到程序集中的东西,而是作为编译的一部分自动嵌入到程序集中的。
以下是清单中存储的重要功能数据摘要:
-
组件的简单名称
-
版本号 (
AssemblyVersion) -
程序集的公钥和签名哈希值(如果以强命名
-
引用程序集的列表,包括其版本和公钥
-
程序集定义的类型列表
-
它所针对的培养物,如果是卫星组件 (
AssemblyCulture)
清单还可以存储以下信息数据:
-
完整的标题和说明 (
AssemblyTitle和AssemblyDescription) -
公司和版权信息 (
AssemblyCompany和AssemblyCopyright) -
一个显示版本 (
AssemblyInformationalVersion) -
自定义数据的附加属性
其中一些数据来自编译器的参数,如引用程序集列表或用于签署程序集的公钥。其余数据则来自括号中的程序集属性。
备注
您可以使用 .NET 工具 ildasm.exe 查看程序集的清单内容。在第 18 章中,我们将介绍如何使用反射以编程方式完成同样的操作。
指定组件属性
常用的程序集属性可在 Visual Studio 的 "项目属性 "页面的 "包 "选项卡上指定。该选项卡上的设置会添加到项目文件(.csproj)中。
要指定 "包 "选项卡不支持的属性,或者如果不使用.csproj文件,可以在源代码中指定程序集属性(通常在名为AssemblyInfo.cs 的文件中指定)。
专用属性文件只包含using 语句和程序集属性声明。例如,要向单元测试项目公开内部作用域类型,可以这样做:
using System.Runtime.CompilerServices; ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access