.net NET中的GAC是什么?

.net NET中的GAC是什么?,.net,gac,.net,Gac,只是想为外行简单介绍一下GAC,请不要链接。 每台计算机都有相同的功能 安装的语言运行库具有 称为 全局程序集缓存。全球 程序集缓存存储程序集 专门指定共享的 通过在 电脑 您应该通过共享程序集 将它们安装到全球网络中 仅当需要时才进行程序集缓存。 作为一般指导原则,保持装配 依赖项私有,并定位 应用程序中的程序集 目录,除非共享程序集 是明确要求的。此外 不需要安装 将程序集导入全局程序集 缓存以使COM能够访问它们 互操作或非托管代码 MSDN包含的内容可能会让您感到惊讶。。。你通常可以把它

只是想为外行简单介绍一下GAC,请不要链接。

每台计算机都有相同的功能 安装的语言运行库具有 称为 全局程序集缓存。全球 程序集缓存存储程序集 专门指定共享的 通过在 电脑

您应该通过共享程序集 将它们安装到全球网络中 仅当需要时才进行程序集缓存。 作为一般指导原则,保持装配 依赖项私有,并定位 应用程序中的程序集 目录,除非共享程序集 是明确要求的。此外 不需要安装 将程序集导入全局程序集 缓存以使COM能够访问它们 互操作或非托管代码

MSDN包含的内容可能会让您感到惊讶。。。你通常可以把它当作一篇文章来读。最直接和最重要的部分在顶部,复杂的细节在更深层次。这当然比我能解释得更好


请注意,VisualStudio在“引用”窗口的.NET选项卡中显示GAC中的所有DLL。(右键单击解决方案资源管理器中的项目,然后选择“添加引用”。)这将为您提供一个更直观的想法。

没错,因此基本上这是一种让DLL可以全局访问而不必担心冲突的方法。再也没有地狱了。每种架构和版本都有自己的居住地

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

C:\Windows\assembly

在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> C:\Users\tritter>cd C:\Windows\assembly C:\Windows\assembly>dir C:\Windows\assembly目录 07/20/2009 02:18下午广汽 06/17/2009 04:22下午GAC_32 06/17/2009 04:22下午GAC_64 2009年6月17日04:22 剪 0个文件0个字节 9 Dir(s)90538311680可用字节 C:\Windows\assembly>cd GAC\U 64 C:\Windows\assembly\GAC\U 64>目录 C:\Windows\assembly\GAC\U 64的目录 2009年6月17日下午4:22。 2009年6月17日下午4:22。。 01/19/2008 09:54上午blbproxy 剪 01/19/2008 09:54上午srmlib 01/19/2008 06:11上午系统数据 01/19/2008 06:11 AM System.Data.OracleClient 剪 0个文件0个字节 34 Dir(s)90538311680可用字节 C:\Windows\assembly\GAC_64>cd系统。数据 C:\Windows\assembly\GAC\U 64\System.Data>dir C:\Windows\assembly\GAC\U 64\System.Data目录 01/19/2008 06:11上午。 01/19/2008 06:11上午。。 2009年11月4日下午12:20 2.0.0.0_uuB77A5C561934E089 0个文件0个字节 3目录(s)90538311680可用字节 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>目录 C:\Windows\assembly\GAC_64\System.Data\2.0.0__b77a5c561934e089的目录 2009年11月4日下午12:20。 2009年11月4日下午12:20。。 04/11/2009 12:12 PM 3008512 System.Data.dll 1个文件3008512字节 2个Dir(s)90538311680可用字节 C:\Windows\assembly\GAC_64\System.Data\2.0.0.0__b77a5c561934e089> 在这里可以看到System.Data的版本2.0.0.0__b77a5c561934e089

DLL由5个部分标识:

  • 名字
  • 版本
  • 建筑
  • 培养
  • 公钥

  • 虽然前3个通常是大的。

    集中式DLL库。

    GAC=全局程序集缓存 让我们把它分解一下:

    • 全局-适用于整个机器
    • 汇编-.NET称之为其代码库(DLL)的内容
    • 缓存-一个存储物品的地方,以便更快/更普通地访问

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

    就物理文件及其接口和位置信息而言,这就像COM注册表做得很好一样。在COM中,文件无处不在,元数据集中。GAC将爆炸事件集中起来。

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

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

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

  • GAC路径

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

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

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

    1) 拖放

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

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

    • 注意:没有扩展名.dll。 版本和PublickeyToken可以省略并在GAC程序集中检查

  • 他说没有链接,想用你自己的话来解释。在他帖子的原始版本中(我相信他编辑得很快),没有具体说明!而且,MSDN的措辞总是会更好、更准确。:)提到这是一种新的方式,你会得到+1
     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh