如何在Gacutil.exe拒绝服务时从GAC中删除dll

时间:2016-11-17 15:44:17

标签: c# .net gac

我在GAC中有一个旧版本的企业库。它抵制任何使用GACUTIL.EXE声称具有以下内容的生命尝试:

  

Microsoft(R).NET全局程序集缓存实用程序。版本3.5.30729.1   版权所有(c)Microsoft Corporation。保留所有权利。

     

程序集:Microsoft.Practices.EnterpriseLibrary.Common,   Version = 4.1.0.0,Culture = neutral,PublicKeyToken = e44a2bc38ed2c13c,processorArchitecture = MSIL
  无法卸载:一个或多个应用程序需要组装   待定参考文献:
                方案:< WINDOWS_INSTALLER> ID:< MSI>描述:< Windows Installer>
  卸载的程序集数= 0故障数= 0

我找到了关于主题here的一些解释,但我找不到任何相关的注册表项。

所以我想要核选项。谁有一个?

2 个答案:

答案 0 :(得分:0)

你试过这个吗?它可能有用,因为我不认为它使用GacUtil:

使用Windows界面

导航到GAC,它位于%systemdrive%\ Windows \ Assembly。

右键单击应用程序中包含的每个程序集文件,单击“卸载”,然后单击“是”进行确认。

MDSN Docs

我找到了别的东西,看看这个: MS Support

答案 1 :(得分:0)

与OpenXml SDK生产力工具存在完全相同的问题,该工具仅存在于版本2.5中,但不存在于最新的2.8.1中。

使用Nuget Package Manager在Visual Studio中为我的ASP.Net网页更新SDK后,我遇到了一个问题,即在发布过程中旧的" DocumentFormat.OpenXml V.2.5" dll已发布,而不是新的(在我的Visual Studio项目中正确引用)。

所以我决定首先使用"程序和功能"卸载旧SDK。页面和之后的"卸载" - MSI安装程序文件的选项。

两者都没有效果。不知何故,dll仍然存在于GAC和注册表中。我尝试使用GACUTIL.exe卸载它,但我收到了以上消息:

    Unable to uninstall: assembly is required by one or more applications
Pending references:
SCHEME: <WINDOWS_INSTALLER> ID: <MSI> DESCRIPTION : <Windows Installer>

然后我删除了(仅限值,而不是关键的自身)

的注册表键值
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Assemblies\Global
DocumentFormat.OpenXml,version="2.5.5631.0",culture="neutral",publicKeyToken="31BF3856AD364E35". 

这对我有用。然后发布正确的dll!希望它可以帮助别人!