全局程序集缓存

全局程序集缓存（Global Assembly Cache，缩写GAC）是微软.NET框架中通用语言架构（CLI）在计算机范围内的一个缓存。这是一个有特殊控制的中央存储库，用以解决了共享程序库概念中的缺陷，并有助于避免其他解决方案中的陷阱，例如DLL地獄。

 需求 
全局缓存中驻留的程序集必须遵守特定的版本控制方案，以允许并行执行不同的代码版本。具体来说，程序集必须采用。

 使用 
与全局程序集缓存交互有两种方式：全局程序集缓存工具（gacutil.exe）和程序集缓存查看器（shfusion.dll）。

 使用示例 
假设一台电脑上有两个名为的AssemblyA，其中一个是1.0版本，另一个是2.0版本。由于编译时需要找到AssemblyA，而两个同名文件不能在FAT32文件系统上存在于同一个目录。而应用此技术，程序可以使用全局程序集缓存的虚拟文件系统，调用所需的特定版本程序集。

 实现 

 陷阱 
全局程序缓存机制有助于避免以前常见的DLL地狱，但它仍然有一些缺点，如：
 默认情况下，应用程序只使用编译它时所使用.NET Framework版本来运行，所以应用程序在安装了较新版本.NET框架的机器上有可能发生故障，即便应用程序能正常在新版中运行。
 如果应用程序中使用了某些仅特定版本框架中可用的核心.NET调用，可能必须使用。
 即便使用此机制，依赖于原生代码的 .NET应用程序可能不兼容。
 添加到全局程序集缓存的每个程序集都必须使用。在某些情况下，完成强命名工作可能很麻烦。例如，如果程序集依赖于另一个非强命名的程序集，则无法在全局程序集缓存中注册。如果第三方程序集的代码不在程序员可修改的范畴，则将程序集转换为强命名是不可能完成的工作。
 使用标准Windows API浏览文件时，不能选择“assembly”文件夹中的DLL文件，文件资源管理器将显示全局程序集缓存的用户友好视图。

 参见 

 .NET框架

 参考资料 

 外部链接 
 .NET Framework Developer's Guide
 Global Assembly Cache Tool (gacutil.exe)
 Demystifying the .NET Global Assembly Cache

Category:.NET
Category:通用语言基础设施
Category:Windows管理