.NET 中的 GAC 是什么?

只是寻找一个简短的概述 GAC 为一个门外汉,而不是一个链接请。

144193 次浏览

< a href = “ http://msdn.microsoft.com/en-us/library/yf1d93sz.aspx”rel = “ noReferrer”> < strong > Global Assembly Cache

< p > 每台电脑在哪里共用 语言运行库安装了一个 机器范围的代码缓存,称为 全局程序集缓存 程序集缓存存储程序集 特别指定为共享 的申请 计算机 你应该通过以下方式共享程序集 安装到全球 只有在需要时才使用程序集缓存。 作为总的指导方针,保持装配 私有的依赖关系,并定位 应用程序中的程序集 除非共享一个程序集 是明确要求的。此外, 不需要安装 程序集转换为全局程序集 缓存,使他们可以访问 COM 互操作或非托管代码

MSDN 包含的内容可能会让你感到惊讶... ... 你通常可以像阅读文章一样阅读它。最上面最直接最重要的部分,更深层的错综复杂的细节。这比我能解释得更清楚。

注意,VisualStudio 将 GAC 中的所有 DLL 显示在。参考文献窗口的 NET 选项卡。(右键单击解决方案资源管理器中的项目,并选择“添加引用”。)这应该能给你一个更切实的想法。

对,所以基本上它是一种保持 DLL 全局可访问而不用担心冲突的方法。再也没有 DLL 地狱了。每个架构和版本都有自己的居住地。

在资源管理器中,它也有自己的浏览方式

C: Windows 程序集

在文件资源管理器中列出了所有的 dll。

但是如果你启动 cmd,你可以看到它的结构:

C:\Users\tritter>cd C:\Windows\assembly


C:\Windows\assembly>dir


Directory of C:\Windows\assembly


07/20/2009  02:18 PM    <DIR>          GAC
06/17/2009  04:22 PM    <DIR>          GAC_32
06/17/2009  04:22 PM    <DIR>          GAC_64
06/17/2009  04:22 PM    <DIR>          GAC_MSIL
...snip...
0 File(s)              0 bytes
9 Dir(s)  90,538,311,680 bytes free


C:\Windows\assembly>cd GAC_64


C:\Windows\assembly\GAC_64>dir


Directory of C:\Windows\assembly\GAC_64


06/17/2009  04:22 PM    <DIR>          .
06/17/2009  04:22 PM    <DIR>          ..
01/19/2008  09:54 AM    <DIR>          blbproxy
...snip...
01/19/2008  09:54 AM    <DIR>          srmlib
01/19/2008  06:11 AM    <DIR>          System.Data
01/19/2008  06:11 AM    <DIR>          System.Data.OracleClient
...snip...
0 File(s)              0 bytes
34 Dir(s)  90,538,311,680 bytes free


C:\Windows\assembly\GAC_64>cd System.Data


C:\Windows\assembly\GAC_64\System.Data>dir
Directory of C:\Windows\assembly\GAC_64\System.Data


01/19/2008  06:11 AM    <DIR>          .
01/19/2008  06:11 AM    <DIR>          ..
04/11/2009  12:20 PM    <DIR>          2.0.0.0__b77a5c561934e089
0 File(s)              0 bytes
3 Dir(s)  90,538,311,680 bytes free


C:\Windows\assembly\GAC_64\System.Data>cd 2.0.0.0__b77a5c561934e089


C:\Windows\assembly\GAC_64\System.Data\2.0.0.0__b77a5c561934e089>dir


Directory of C:\Windows\assembly\GAC_64\System.Data\2.0.0.0__b77a5c561934e089


04/11/2009  12:20 PM    <DIR>          .
04/11/2009  12:20 PM    <DIR>          ..
04/11/2009  12:12 PM         3,008,512 System.Data.dll
1 File(s)      3,008,512 bytes
2 Dir(s)  90,538,311,680 bytes free


C:\Windows\assembly\GAC_64\System.Data\2.0.0.0__b77a5c561934e089>

这里您可以看到 System.Data 的版本2.0.0.0 _ _ b77a5c561934e089。

DLL 由5部分组成:

  1. 姓名
  2. 版本
  3. 建筑学
  4. 文化
  5. 公开密码匙

虽然前三个通常都是大的。

集中式 DLL 库。

GAC = 全局程序集缓存

我们来分析一下:

  • 全局-适用于整个机器
  • 程序集-.NET 调用它的代码库(DLL)
  • Cache-用于存储更快/通用访问的地方

因此,GAC 必须是存储代码库的地方,以便机器上运行的所有应用程序都可以访问这些代码库。

就物理文件以及它们的接口和位置信息而言,它就像 COM 注册表一样做得很好。在 COM 中,文件无处不在,有着集中的元数据。GAC 集中了爆炸射击。

GAC (全局程序集缓存)是所有共享.NET 程序集所在的位置。

全局程序集缓存(GAC)是 Windows 目录中的一个文件夹,用于存储。NET 程序集,这些程序集专门指定由系统上执行的所有应用程序共享。通过在全局程序集缓存(GAC)中注册程序集,可以在计算机上的多个应用程序之间共享程序集。GAC 是由。NET 架构。

< p > Exe 应用程序,首先,从工作目录到子目录的引用。 然后是系统目录。 VS6.0系统目录是. . windows/system32。 . NET 系统目录类似于下面的 GAC 路径。

  1. < p > GAC 路径

    1) C: Windows 汇编(适用于.NET 2.0 ~ 3.5)

    2) C: Windows Microsoft.NET 程序集(用于.NET 4.0)

  2. < p > 如何将程序集安装到 GAC (作为管理员)

    1)拖放

    2)在 Visual Studio 命令提示符下使用 GacUtil.exe

     gacutil -i [Path][Assembly Name].dll
    
      < li > 注意: 要在 GAC 中安装程序集,必须对该程序集进行强名称。 否则,您将得到如下错误: 向缓存添加程序集失败: 尝试安装没有强名称的程序集
  3. 如何从 GAC 卸载程序集(作为管理员)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    
      < li > 注意: 没有扩展名,. dll。 版本和 PubliceyToken 可以省略,并在 GAC 汇编中检查。