GAC 学习

每一个被安装了CLR 的计算机都有一个全局程序集缓存,简写GAC, GAC 是一个面向机器的用来保持程序集的,用于在一台机器的几个应用程序之间共享程序集的机制。在Dot Net 框架中,GAC 是注册程序集的中心地带。它最初被叫做联合缓存并且被Fusion.dll实现。

我们可以用各种方式部署程序集在GAC中。一个与GAC一起工作的安装器可以被使用。这是安装程序集最好的方式。第二种方式是使用开发工具叫做GAC tool ,在dot net framework SDK 中可以被找到。你也可以拖拽程序集到GAC通过使用Windows Explorer.

 

使用GAC 的好处

强名签名验证: 所有的共享程序集必须要有强名签名,当程序集被安装到GAC时,这些签名被验证。

性能 当解析一个程序集时CLR会先浏览GAC,如果没有发现请求的程序集,那么它就浏览应用程序目录,很明显,会有一个性能的获得通过搜索第一个位置。

            部署 bug fixes :管理员可以部署bug fixes 被所有的程序公用。通过部署到GAC 开始合适的版本策略在机器的配置文件中,管理员能够确信所有的程序都能使用这个fix

 

尽管有这些好处,使用GAC 有一个明显的弱点,它增加了安装和卸载程序集的复杂性。

 

浏览实际的GAC目录

 

当你在explorer 中浏览GAC目录时,看起来好像所有的程序集文件都直接放在GAC 目录下

但是,实际不是这样的。如果你进入GAC目录 通过一个 Dos 窗口,你就会卡脑GAC包含子目录和每一个程序集都有它自己独立的子目录。之所以不同是因为你实际是通过Fusion shell来读取得。

 

GAC 指定的空间

导向GAC目录 c:\winnt\Assembly in explore. 在工具菜单中选择缓存属性,你可以看到内存使用限制

 

迁移GAC

 

默认的GAC位置是 <%windir% >"assembly 文件夹。这个位置不可配置在 .net framework 安装的时候。一旦.net framework 完全安装后,可能会迁移GAC到一个不同的位置。设置the registry key CacheLocation (REG_SZ) HKLM"Software"Microsoft"Fusion,这个路径是GAC需要被定为的位置。.net 会在 CacheLocation 下创建一个程序集子文件夹。

 

原文地址:https://www.cnblogs.com/flyinthesky/p/1260141.html