我正在从 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 中。
那是因为您使用的是 .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垃圾桶
路径是 -> C:\Windows\Microsoft.NET\assembly\GAC_MSIL,其中存储了 .net 4.0 版本的所有程序集
这是因为您要安装到 GAC 中的程序集是针对 4.0 运行时编译的。 4.0 GAC 程序集存储在不同的位置 c:\windows\microsoft.net\assembly。
接受的答案不正确。使用 .NET 4.0 gacutil 安装针对 3.5 或更早运行时编译的程序集工作得很好,并将程序集放置在 OP 期望的目录中,c:\windows\assembly。
不定期副业成功案例分享
\v7.0.A\bin
中使用 3.5 版本的 gacutil.exe,但该实用程序版本无法安装 .NET 4.0 程序集。