ChatGPT解决这个技术问题 Extra ChatGPT

Gacutil.exe 成功添加程序集,但在资源管理器中无法查看程序集。为什么?

我正在从 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 Projects\bmccormack\CatalogPromotion\CatalogPromotionDll\bin
    \Debug>gacutil /i CatalogPromotionDll.dll
    Microsoft (R) .NET Global Assembly Cache Utility.  Version 4.0.30319.1
    Copyright (c) Microsoft Corporation.  All rights reserved.

    Assembly successfully added to the cache

    C:\_Dev Projects\VS Projects\bmccormack\CatalogPromotion\CatalogPromotionDll\bin
    \Debug>gacutil /l CatalogPromotionDll
    Microsoft (R) .NET Global Assembly Cache Utility.  Version 4.0.30319.1
    Copyright (c) Microsoft Corporation.  All rights reserved.

    The Global Assembly Cache contains the following assemblies:
      CatalogPromotionDll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9188a175
    f199de4a, processorArchitecture=MSIL

    Number of items = 1

但是,该程序集不会显示在 C:\WINDOWS\assembly 中。


H
Hans Passant

那是因为您使用的是 .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.0A\ 中的 .NET 2.0 版本的 gacutil.exe垃圾桶


该程序集旨在由带有 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 Library 文章中有很好的描述。没什么大不了的,它只是记录了 DLL 所在的目录。将它安装在目标机器上的 GAC 中是明智的,以避免 COM DLL Hell。使用安装项目很容易做到。
非常感谢@Hans Passant .. 你拯救了我的一天 :)
b
bijitm

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


g
gravidThoughts

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

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅