程序集和全局程序集缓存(C# 和 Visual Basic)

程序集构成了基于 .NET 的应用程序的部署、版本控制、重用、激活范围和安全权限的基本单元。 程序集以可执行 (.exe) 文件或动态链接库 (.dll) 文件的形式出现,是 .NET Framework 的生成块。 它们向公共语言运行时提供了解类型实现所需要的信息。 可以将程序集看成是构成逻辑功能单元并为一起工作而生成的类型和资源的集合。

程序集可以包含一个或多个模块。 例如,计划较大的项目时,可以让几个各个开发人员负责单独的模块,并通过组合所有这些模块来创建单个程序集。 有关模块的更多信息,请参见主题如何:生成多文件程序集

程序集具有以下特点:

  • 程序集作为 .exe 或 .dll 文件实现。

  • 通过将程序集放在全局程序集缓存中,可在多个应用程序之间共享程序集。 在将程序集包含在全局程序集缓存之前,必须对程序集进行强命名。 有关更多信息,请参见具有强名称的程序集

  • 程序集仅在需要时才加载到内存中。 如果不使用程序集,则不会加载。 这意味着程序集可能是在大型项目中管理资源的有效途径。

  • 可以使用反射以编程方式获取关于程序集的信息。 有关更多信息,请参见反射

  • 如果加载程序集的目的只是对其进行检查,应使用诸如 ReflectionOnlyLoadFrom 的方法。

程序集清单

每个程序集中都有一个“程序集清单”。 类似于目录,程序集清单包含以下内容:

  • 程序集的标识(其名称和版本)。

  • 文件表,描述组成程序集的所有其他文件,例如包括创建的、.exe 或 .dll 文件所依赖的任何其他程序集,甚至包括位图文件或自述文件。

  • “程序集引用列表”是所有外部依赖项的一个列表,这些外部依赖项就是一些 .dll 或已由其他人创建而您的应用程序所需的其他文件。 程序集引用同时包含对全局对象和私有对象的引用。 全局对象驻留在全局程序集缓存中(可供其他应用程序使用的区域,有些类似于 System32 目录)。 Microsoft.VisualBasic 命名空间是全局程序集缓存中程序集的一个示例。 私有对象必须在应用程序安装目录的同一级(或下一级)目录中。

由于程序集包含有关内容、版本控制和依赖项的信息,因此用 Visual Basic 和 C# 创建的应用程序不依赖注册表值就可正常运行。 程序集减少了 .dll 冲突,使应用程序更加可靠和更易于部署。 许多情况下,只需将基于 .NET 应用程序的文件复制到目标计算机就可以安装该应用程序。

有关更多信息,请参见程序集清单

添加对程序集的引用

若要使用一个程序集,则必须添加一个对它的引用,如 如何:在 Visual Studio 中添加或移除引用 中所述。 接下来,使用 Visual Basic 中的 Imports 语句或 C# 中的 using 指令选择要使用的项的命名空间。 当一个程序集被引用并导出后,其命名空间的所有可访问类、属性、方法及其他成员均可用于应用程序,就像其代码是您的源文件的一部分。

在 C# 中,还可以在单个应用程序中使用相同程序集的两个版本。 有关更多信息,请参见 extern 别名

创建程序集

通过选择**“生成”菜单中的“生成”**,或者使用命令行编译器从命令行生成它来编译应用程序。 有关通过命令行生成程序集的详细信息,请参见从命令行生成 (Visual Basic)(适用于 Visual Basic)和在命令行上使用 csc.exe 生成(适用于 C#)。

请参见

任务

如何:与其他应用程序共享程序集(C# 和 Visual Basic)

如何:加载和卸载程序集(C# 和 Visual Basic)

如何:确定文件是否为程序集(C# 和 Visual Basic)

如何:使用命令行创建和使用程序集(C# 和 Visual Basic)

演练:嵌入托管程序集中的类型(C# 和 Visual Basic)

演练:嵌入 Microsoft Office 程序集中的类型信息(C# 和 Visual Basic)

概念

C# 编程指南

公共语言运行时中的程序集

友元程序集(C# 和 Visual Basic)

其他资源

Visual Basic 编程指南