注释
本文特定于 .NET Framework。 它不适用于 .NET 的较新版本实现,包括 .NET 6 及更高版本。
安装了公共语言运行时的每台计算机都有一个名为全局程序集缓存的计算机范围的代码缓存。 全局程序集缓存存储专门由计算机上的多个应用程序共享的程序集。
只有在需要时,才应将程序集安装到全局程序集缓存中进行共享。 一般原则是:程序集依赖项保持专用,并将程序集放在应用程序目录中,除非明确要求共享该程序集。 此外,不需要将程序集安装到全局程序集缓存中,以使程序集可供 COM 互作或非托管代码访问。
注释
在有些情况下,很明显不需要将程序集安装到全局程序集缓存中。 如果将构成应用程序的其中一个程序集放置在全局程序集缓存中,则不能再使用 xcopy 命令复制或安装应用程序目录。 必须同时移动全局程序集缓存中的程序集。
有两种方法可将程序集部署到全局程序集缓存中:
使用专用于全局程序集缓存的安装程序。 这是将程序集安装到全局程序集缓存的首选选项。
使用 Windows SDK 提供的名为 全局程序集缓存工具(Gacutil.exe)的开发人员工具。
注释
在部署方案中,使用 Windows Installer 将程序集安装到全局程序集缓存中。 仅在开发方案中使用全局程序集缓存工具,因为它不提供程序集引用计数以及使用 Windows Installer 时提供的其他功能。
从 .NET Framework 4 开始,全局程序集缓存的默认位置 %windir%\Microsoft.NET\assembly。 在 .NET Framework 的早期版本中,默认位置 %windir%\assembly。
管理员通常使用访问控制列表 (ACL) 保护 systemroot 目录,以控制写入和执行访问权限。 由于全局程序集缓存安装在 systemroot 目录的子目录中,因此它将继承该目录的 ACL。 建议仅允许具有管理员权限的用户从全局程序集缓存中删除文件。
部署在全局程序集缓存中的程序集必须使用强名称。 将程序集添加到全局程序集缓存时,对构成程序集的所有文件执行完整性检查。 缓存执行这些完整性检查,以确保程序集未被篡改,例如,当文件已更改但清单不反映更改时。