全局程序集缓存(Global Assembly Cache,缩写GAC)是微软.NET框架中通用语言架构(CLI)在计算机范围内的一个CLI程序集缓存。这是一个有特殊控制的中央存储库,用以解决了共享程序库概念中的缺陷,并有助于避免其他解决方案中的陷阱,例如DLL地獄。
全局程序集缓存中驻留的程序集必须遵守特定的版本控制方案,以允许并行执行不同的代码版本。具体来说,程序集必须采用强命名。
与全局程序集缓存交互有两种方式:全局程序集缓存工具(gacutil.exe)和程序集缓存查看器(shfusion.dll)。
假设一台电脑上有两个名为程序集的AssemblyA,其中一个是1.0版本,另一个是2.0版本。由于编译时需要找到AssemblyA,而两个同名文件不能在FAT32文件系统上存在于同一个目录。而应用此技术,程序可以使用全局程序集缓存的虚拟文件系统,调用所需的特定版本程序集。
全局程序缓存机制有助于避免以前常见的DLL地狱,但它仍然有一些缺点,如:[1]