什么是.NET中的GAC?

时间:2009-08-12 19:51:39

标签: .net gac

只是为外行寻找GAC的简短概述,而不是链接。

8 个答案:

答案 0 :(得分:159)

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

它也有自己的方式在资源管理器中浏览它,所以如果你去

  

C:\的Windows \组件

在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. 虽然前3个通常是大的。

答案 1 :(得分:83)

GAC =全局程序集缓存

让我们分解一下:

  • global - 适用于整个机器
  • 程序集 - .NET调用其代码库(DLL)
  • 缓存 - 存储内容以便更快/更常见访问的地方

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

答案 2 :(得分:61)

Global Assembly Cache

  

每台电脑常见的地方   语言运行库安装有一个   机器范围的代码缓存称为   全局程序集缓存。全球   程序集缓存存储程序集   专门指定分享   通过几个应用程序   计算机。

     

你应该共享程序集   将它们安装到全局中   只在需要时才进行汇编缓存。   作为一般准则,保持组装   依赖私有,并找到   应用程序中的程序集   目录除非共享程序集   明确要求。此外,   没有必要安装   程序集进入全局程序集   缓存使COM可以访问它们   互操作或非托管代码。

MSDN包含的内容可能让您感到惊讶......您通常可以像文章一样阅读它。顶部直截了当,最重要的部分,错综复杂的细节更深层次。它当然比我更好地解释了它。

请注意,Visual Studio会在引用窗口的.NET选项卡中显示GAC中的所有DLL。 (在解决方案资源管理器中右键单击一个项目,然后选择添加引用。)这应该会给你一个更切向的想法。

答案 3 :(得分:19)

集中式DLL库。

答案 4 :(得分:10)

Exe Application,首先是从当前目录到子目录的引用。 然后,系统目录。 VS6.0系统目录是..windows / system32。 .NET系统目录类似于以下GAC路径。

  1. GAC路径

    1)C:\ Windows \ Assembly(适用于.NET 2.0~3.5)

    2)C:\ Windows \ Microsoft.NET \ assembly(适用于.NET 4.0)

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

    1)拖放

    2)将GacUtil.exe与Visual Studio命令提示符一起使用

     gacutil -i [Path][Assembly Name].dll
    
    • 注意:要将程序集安装到GAC中,必须强烈命名程序集。      否则会出现如下错误:将程序集添加到缓存失败:      尝试安装没有强名称的程序集。
  3. 如何从GAC卸载程序集(作为管理员)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    
    • 注意:没有延伸,.dll。     可以省略Version和PublickeyToken,并在GAC程序集中进行检查。

答案 5 :(得分:9)

全局程序集缓存(GAC)是Windows目录中的一个文件夹,用于存储专门指定由系统上执行的所有应用程序共享的.NET程序集。通过在全局程序集缓存(GAC)中注册程序集,可以在计算机上的多个应用程序之间共享程序集。 GAC是机器范围内由.NET Framework维护的程序集的本地缓存。

答案 6 :(得分:5)

就像物理文件以及它们的界面和位置信息一样,COM注册表做得恰到好处。在COM中,文件无处不在,具有集中式元数据。 GAC集中轰炸。

答案 7 :(得分:5)

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