【问题标题】:Gacutil.exe successfully adds assembly, but assembly not viewable in explorer. Why?Gacutil.exe 成功添加程序集,但在资源管理器中无法查看程序集。为什么?
【发布时间】:2011-03-04 12:22:38
【问题描述】:

我在 Visual Studio 命令提示符 2010 中运行 GacUtil.exe 以将 dll (CatalogPromotion.dll) 注册到 GAC。运行该实用程序后,它显示Assembly Successfully added to the cache,运行gacutil /l CatalogPromotionDll 表明GAC 包含程序集,但是当我从Windows 资源管理器导航到C:\WINDOWS\assembly 时看不到程序集。 为什么我在 Windows 资源管理器中看不到 WINDOWS\assembly 中的程序集,但我可以使用 gacutil.exe 看到它?


背景:这是我在 VS Tools 的命令提示符中输入的内容:

C:\_Dev Projects\VS 项目\bmccormack\CatalogPromotion\CatalogPromotionDll\bin \Debug>gacutil /i CatalogPromotionDll.dll Microsoft (R) .NET 全局程序集缓存实用程序。版本 4.0.30319.1 版权所有 (c) 微软公司。版权所有。 程序集成功添加到缓存中 C:\_Dev Projects\VS 项目\bmccormack\CatalogPromotion\CatalogPromotionDll\bin \Debug>gacutil /l CatalogPromotionDll Microsoft (R) .NET 全局程序集缓存实用程序。版本 4.0.30319.1 版权所有 (c) 微软公司。版权所有。 全局程序集缓存包含以下程序集: CatalogPromotionDll,版本=1.0.0.0,文化=中性,PublicKeyToken=9188a175 f199de4a,处理器架构=MSIL 项目数 = 1

但是,程序集没有显示在 C:\WINDOWS\assembly 中。

【问题讨论】:

    标签: .net windows assemblies gac gacutil


    【解决方案1】:

    那是因为您使用的是 .NET 4.0 版本的 gacutil.exe。它将程序集存储在一个不同的 GAC 中,即 c:\windows\microsoft.net\assembly 中的一个。存储所有 .NET 4.0 程序集的位置。该文件夹没有外壳扩展处理程序,文件夹按原样可见。您可以使用 Windows 资源管理器进行查看。您将看到 GAC 文件夹的内部结构。找回您的程序集应该不会有任何问题,GAC 并不是特别复杂。

    如果该程序集旨在供以早期版本 .NET 为目标的应用程序使用,那么您应该使用存储在 C:\Program Files\Microsoft SDKs\Windows\v6 中的 .NET 2.0 版本的 gacutil.exe .0A\bin

    【讨论】:

    • 该程序集旨在供带有 COM 的 VB6 应用程序使用。我尝试在\v7.0.A\bin 中使用 3.5 版本的 gacutil.exe,但该版本的实用程序无法安装 .NET 4.0 程序集。
    • VB6 不关心您使用的 .NET 版本。它适用于 .NET 4.0。您可能想开始考虑如何将其部署在目标机器上。那里没有可用的 gacutil.exe,您必须创建一个安装项目。使用 Regasm.exe /codebase 选项进行调试时避免 GAC 麻烦。
    • 感谢您的建议。你能指出我可以阅读更多关于 regasm.exe /codebase 的方向吗?我一直在考虑与部署相关的问题,您提出了一个很好的观点,即 gacutil.exe 在那里不可用。我只是想看看在 VB6 应用程序中使用 .NET 组件时应该如何做到这一点。
    • 在 MSDN 库文章中对此进行了很好的描述。没什么大不了的,它只是记录了 DLL 所在的目录。将它安装在目标机器上的 GAC 中是避免 COM DLL Hell 的明智之举。使用安装项目轻松完成。
    • 非常感谢@Hans Passant.. 你拯救了我的一天 :)
    【解决方案2】:

    路径是 -> C:\Windows\Microsoft.NET\assembly\GAC_MSIL,其中存储了 .net 4.0 版本的所有程序集

    【讨论】:

      【解决方案3】:

      这是因为您要安装到 GAC 中的程序集是针对 4.0 运行时编译的。 4.0 GAC 程序集存储在不同的位置 c:\windows\microsoft.net\assembly。

      接受的答案不正确。使用 .NET 4.0 gacutil 安装针对 3.5 或更早运行时编译的程序集工作正常,并将程序集放置在 OP 期望的目录中,c:\windows\assembly。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-02
        • 1970-01-01
        • 2012-12-15
        相关资源
        最近更新 更多