使用程序集和全局程序集缓存

注释

本文特定于 .NET Framework。 它不适用于 .NET 的较新版本实现,包括 .NET 6 及更高版本。

如果要在多个应用程序之间共享程序集,则可以将其安装到全局程序集缓存中。 安装了公共语言运行时的每台计算机都有此计算机范围的代码缓存。 全局程序集缓存存储专门由计算机上的多个应用程序共享的程序集。 程序集必须具有强名称才可安装到全局程序集缓存中。

注释

放置在全局程序集缓存中的程序集必须具有相同的程序集名称和文件名(不包括文件扩展名)。 例如,具有 myAssembly 程序集名称的程序集必须具有 myAssembly.exe 或 myAssembly.dll的文件名。

仅在必要时才应将程序集安装到全局程序集缓存中来共享程序集。 作为一般准则,除非显式需要共享程序集,否则应将程序集依赖项设为私有,并将程序集定位在应用程序目录中。 此外,无需将程序集安装到全局程序集缓存中,以使程序集可供 COM 互作或非托管代码访问。

你可能希望将程序集安装到全局程序集缓存中的原因有多种:

  • 共享位置。

    应用程序应使用的程序集可以放入全局程序集缓存中。 例如,如果所有应用程序都应使用位于全局程序集缓存中的程序集,则可以将版本策略语句添加到将引用重定向到程序集的 Machine.config 文件中。

  • 文件安全性。

    管理员通常使用访问控制列表(ACL)保护系统根目录,以控制写入和执行访问权限。 由于全局程序集缓存安装在 systemroot 目录中,因此它将继承该目录的 ACL。 建议仅允许具有管理员权限的用户从全局程序集缓存中删除文件。

  • 并行版本。

    可以在全局程序集缓存中维护具有相同名称但不同版本信息的程序集的多个副本。

  • 其他搜索位置。

    公共语言运行时在探测或使用配置文件中的代码库信息之前检查全局程序集缓存中是否存在与程序集请求匹配的程序集。

请注意,在某些情况下,您明确不希望将程序集安装到全局程序集缓存中。 如果将构成应用程序的某个程序集放置在全局程序集缓存中,则不能再使用 XCOPY 复制应用程序目录或安装应用程序。 在这种情况下,还必须将程序集移动到全局程序集缓存中。

本节中

如何:将程序集安装到全局程序集缓存中 描述将程序集安装到全局程序集缓存中的方法。

如何:查看全局程序集缓存的内容 介绍如何使用 Gacutil.exe(全局程序集缓存工具) 查看全局程序集缓存的内容。

如何:从全局程序集缓存中删除程序集 介绍如何使用 Gacutil.exe(全局程序集缓存工具) 从全局程序集缓存中删除程序集。

将服务组件与全局程序集缓存配合使用 说明为何应将服务组件(托管 COM+ 组件)置于全局程序集缓存中。

创建程序集 概述如何创建程序集。

全局程序集缓存 描述全局程序集缓存。

如何:查看程序集内容 介绍如何使用 Ildasm.exe(IL 反汇编程序) 查看程序集中的公共中间语言(CIL)信息。

运行时如何定位程序集 描述公共语言运行时如何查找和加载构成应用程序的程序集。

使用程序集编程 描述程序集,托管应用程序的构建基块。