【问题标题】:What is the GAC in .NET?.NET 中的 GAC 是什么?
【发布时间】:2010-11-19 02:15:52
【问题描述】:

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

【问题讨论】:

    标签: .net gac


    【解决方案1】:

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

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

    C:\Windows\程序集

    在 Windows 资源管理器中,它列出了所有 DLL。

    但如果你启动cmd,你会看到它的真正结构:

    C:\Users\tritter>cd C:\Windows\程序集 C:\Windows\程序集>目录 C:\Windows\程序集目录 2009 年 7 月 20 日下午 02:18 GAC 2009 年 6 月 17 日下午 4:22 GAC_32 2009 年 6 月 17 日下午 4:22 GAC_64 2009 年 6 月 17 日下午 4:22 GAC_MSIL ……剪…… 0 个文件 0 个字节 9 Dir(s) 90,538,311,680 字节空闲 C:\Windows\程序集>cd GAC_64 C:\Windows\程序集\GAC_64>目录 C:\Windows\assembly\GAC_64 目录 2009 年 6 月 17 日下午 4:22 。 2009 年 6 月 17 日下午 4:22 .. 2008 年 1 月 19 日上午 9:54 blbproxy ……剪…… 2008 年 1 月 19 日上午 9:54 srmlib 01/19/2008 06:11 AM System.Data 01/19/2008 06:11 AM System.Data.OracleClient ……剪…… 0 个文件 0 个字节 34 Dir(s) 90,538,311,680 字节空闲 C:\Windows\assembly\GAC_64>cd System.Data C:\Windows\程序集\GAC_64\System.Data>目录 C:\Windows\assembly\GAC_64\System.Data 目录 2008 年 1 月 19 日上午 06:11 。 2008 年 1 月 19 日上午 06:11 .. 2009 年 4 月 11 日下午 12:20 2.0.0.0__b77a5c561934e089 0 个文件 0 个字节 3 Dir(s) 90,538,311,680 字节空闲 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 C:\Windows\assembly\GAC_64\System.Data\2.0.0.0__b77a5c561934e089 目录 2009 年 4 月 11 日下午 12:20 。 2009 年 4 月 11 日下午 12:20 .. 2009 年 4 月 11 日下午 12:12 3,008,512 System.Data.dll 1 个文件 3,008,512 字节 2 Dir(s) 90,538,311,680 字节空闲 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 地狱”的同时全局引用 .dll 的新方法而获得 +1。 (如果您稍微了解一下 dll 地狱是什么,以及 GAC 如何绕过它,那将是一个更好的答案……您已经了解了它的基本轮廓……但我会收紧目录结构插图,并添加一些如何识别和唯一的 dll)不要听起来太消极......我确实给了 +1!
    • 只是不提供链接:]。关于您的答案的问题,是“GAC_64”目录名称指定的“3. Architecture”吗?在这种情况下,Culture 是否为空白——“__”下划线之间的值?
    • GAC 是否只存在于 .NET 应用程序中?
    【解决方案2】:

    GAC = 全局程序集缓存

    让我们分解一下:

    • 全局 - 适用于整台机器
    • 程序集 - .NET 将其称为代码库 (DLL)
    • 缓存 - 存储东西以便更快/常用访问的地方

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

    【讨论】:

      【解决方案3】:

      Global Assembly Cache

      每台电脑都有共同点 安装语言运行时有一个 机器范围的代码缓存称为 全局程序集缓存。全球 程序集缓存存储程序集 特别指定为共享 通过几个应用程序 电脑。

      您应该通过以下方式共享程序集 将它们安装到全球 仅在需要时才缓存程序集。 作为一般准则,保持组装 依赖私有,并定位 应用程序中的程序集 目录,除非共享程序集 是明确要求的。此外, 没有必要安装 组装成全局组装 缓存以使 COM 可以访问它们 互操作或非托管代码。

      MSDN 包含的内容可能会让您大吃一惊……您通常可以像阅读文章一样阅读它。顶部最直接和最重要的部分,更深层次的复杂细节。它肯定比我能解释得更好。

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

      【讨论】:

      • 他说没有链接,想用你自己的话解释一下。
      • 在他的帖子的原始版本中(我相信他很快编辑了它),没有指定!
      • 另外,MSDN 的话总是会变得更好更准确。 :)
      【解决方案4】:

      集中式 DLL 库。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          Exe 应用程序,首先,从当前目录引用到子目录。 然后,系统目录。 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) 在 Visual Studio 命令提示符下使用 GacUtil.exe

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

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

          【讨论】:

            【解决方案7】:

            就物理文件以及它们的接口和位置信息而言,这就像 COM 注册表做得正确。在 COM 中,文件无处不在,具有集中的元数据。 GAC 集中管理大爆炸。

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2010-09-06
                • 1970-01-01
                • 2013-01-01
                • 2011-08-06
                • 1970-01-01
                • 1970-01-01
                • 2010-09-06
                相关资源
                最近更新 更多