Gacutil.exe成功添加了程序集,但程序集在资源管理器中不可见。为什么?


69

我正在Visual Studio Command Prompt 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项目\ VS项目\ bmccormack \ CatalogPromotion \ CatalogPromotionDll \ bin
    \ Debug> gacutil / i CatalogPromotionDll.dll
    Microsoft(R).NET全局程序集缓存实用程序。版本4.0.30319.1
    版权所有(c)Microsoft Corporation。版权所有。

    程序集成功添加到缓存

    C:\ _ Dev项目\ VS项目\ bmccormack \ CatalogPromotion \ CatalogPromotionDll \ bin
    \ Debug> gacutil / l CatalogPromotionDll
    Microsoft(R).NET全局程序集缓存实用程序。版本4.0.30319.1
    版权所有(c)Microsoft Corporation。版权所有。

    全局程序集缓存包含以下程序集:
      CatalogPromotionDll,版本= 1.0.0.0,文化=中性,PublicKeyToken = 9188a175
    f199de4a,processorArchitecture = MSIL

    项目数= 1

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

Answers:


110

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

如果该程序集旨在由面向.NET早期版本的应用程序使用,则应使用gacutil.exe的.NET 2.0版本,该版本存储在C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \箱子


该程序集旨在由带有COM的VB6应用程序使用。我尝试在中使用3.5版本的gacutil.exe \v7.0.A\bin,但是该版本的实用程序无法安装.NET 4.0程序集。
本麦考马克

1
VB6不在乎您使用什么版本的.NET。它将在.NET 4.0下正常工作。您可能要开始考虑如何将其部署在目标计算机上。那里没有gacutil.exe,您必须创建一个安装项目。通过使用Regasm.exe / codebase选项进行调试时,避免GAC麻烦。
汉斯·帕桑

感谢您的建议。您能否指出我可以阅读有关regasm.exe / codebase的更多信息的方向?我一直在考虑与部署相关的问题,您会发现gacutil.exe在那里不可用。我只是想看看在VB6应用程序中使用.NET组件时应该如何完成。
本麦考马克

在MSDN库文章中对此进行了很好的描述。没什么,它只记录DLL所在的目录。明智的做法是将其安装在目标计算机上的GAC中,以避免COM DLL Hell。轻松完成安装项目。
汉斯·帕桑特2010年

非常感谢@Hans Passant ..您拯救了我的一天:)
Suhani Mody

2

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

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


2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.