fbpx
维基百科

全局程序集缓存

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

需求

全局程序集英语Assembly (CLI)缓存中驻留的程序集必须遵守特定的版本控制方案,以允许并行执行不同的代码版本。具体来说,程序集必须采用强命名英语Strong name

使用

与全局程序集缓存交互有两种方式:全局程序集缓存工具(gacutil.exe)和程序集缓存查看器(shfusion.dll)。

使用示例

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

实现

陷阱

全局程序缓存机制有助于避免以前常见的DLL地狱,但它仍然有一些缺点,如:[1]

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

参见

  • 下载缓存英语Download Cache
  • .NET框架

参考资料

  1. ^ John, Mueller. Ten Managed Application Pitfalls that Kill Version Compatibility. devsource.com. 2005-02-11 [2008-01-26]. (原始内容存档于2013-01-21). 

外部链接

  • .NET Framework Developer's Guide(中文)(英文)
  • Global Assembly Cache Tool (gacutil.exe)(中文)(英文)
  • Demystifying the .NET Global Assembly Cache(页面存档备份,存于互联网档案馆(英文)

全局程序集缓存, global, assembly, cache, 缩写gac, 是微软, net框架中通用语言架构, 在计算机范围内的一个cli程序集, 英语, assembly, 缓存, 这是一个有特殊控制的中央存储库, 用以解决了共享程序库概念中的缺陷, 并有助于避免其他解决方案中的陷阱, 例如dll地獄, 目录, 需求, 使用, 使用示例, 实现, 陷阱, 参见, 参考资料, 外部链接需求, 编辑全局程序集, 英语, assembly, 缓存中驻留的程序集必须遵守特定的版本控制方案, 以允许并行执行不同的代. 全局程序集缓存 Global Assembly Cache 缩写GAC 是微软 NET框架中通用语言架构 CLI 在计算机范围内的一个CLI程序集 英语 Assembly CLI 缓存 这是一个有特殊控制的中央存储库 用以解决了共享程序库概念中的缺陷 并有助于避免其他解决方案中的陷阱 例如DLL地獄 目录 1 需求 2 使用 3 使用示例 4 实现 5 陷阱 6 参见 7 参考资料 8 外部链接需求 编辑全局程序集 英语 Assembly CLI 缓存中驻留的程序集必须遵守特定的版本控制方案 以允许并行执行不同的代码版本 具体来说 程序集必须采用强命名 英语 Strong name 使用 编辑与全局程序集缓存交互有两种方式 全局程序集缓存工具 gacutil exe 和程序集缓存查看器 shfusion dll 使用示例 编辑假设一台电脑上有两个名为程序集 英语 Assembly CLI 的AssemblyA 其中一个是1 0版本 另一个是2 0版本 由于编译时需要找到AssemblyA 而两个同名文件不能在FAT32文件系统上存在于同一个目录 而应用此技术 程序可以使用全局程序集缓存的虚拟文件系统 调用所需的特定版本程序集 实现 编辑陷阱 编辑全局程序缓存机制有助于避免以前常见的DLL地狱 但它仍然有一些缺点 如 1 默认情况下 应用程序只使用编译它时所使用 NET Framework版本来运行 所以应用程序在安装了较新版本 NET框架的机器上有可能发生故障 即便应用程序能正常在新版中运行 如果应用程序中使用了某些仅特定版本框架中可用的核心 NET调用 可能必须使用条件编译 英语 Conditional compilation Conditional compilation 即便使用此机制 依赖于原生代码的 NET应用程序可能不兼容 添加到全局程序集缓存的每个程序集都必须使用Strong key 英语 强命名 在某些情况下 完成强命名工作可能很麻烦 例如 如果程序集依赖于另一个非强命名的程序集 则无法在全局程序集缓存中注册 如果第三方程序集的代码不在程序员可修改的范畴 则将程序集转换为强命名是不可能完成的工作 使用标准Windows API浏览文件时 不能选择 assembly 文件夹中的DLL文件 文件资源管理器将显示全局程序集缓存的用户友好视图 参见 编辑下载缓存 英语 Download Cache NET框架参考资料 编辑 John Mueller Ten Managed Application Pitfalls that Kill Version Compatibility devsource com 2005 02 11 2008 01 26 原始内容存档于2013 01 21 外部链接 编辑 NET Framework Developer s Guide 中文 英文 Global Assembly Cache Tool gacutil exe 中文 英文 Demystifying the NET Global Assembly Cache 页面存档备份 存于互联网档案馆 英文 取自 https zh wikipedia org w index php title 全局程序集缓存 amp oldid 63323384, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。