Gacutil.exe 拒绝服务时如何从 GAC 中删除 dll
How to remove a dll from the GAC when Gacutil.exe refuses service
我在 GAC 中有一个旧版本的企业库。它拒绝任何以 GACUTIL.EXE 声称以下内容而对其生命进行的尝试:
Microsoft (R) .NET Global Assembly Cache Utility. Version 3.5.30729.1
Copyright (c) Microsoft Corporation. All rights reserved.
Assembly: Microsoft.Practices.EnterpriseLibrary.Common,
Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL
Unable to uninstall: assembly is required by one or more applications
Pending references:
SCHEME: <WINDOWS_INSTALLER> ID: <MSI> DESCRIPTION : <Windows Installer>
Number of assemblies uninstalled = 0 Number of failures = 0
我找到了关于这个主题的一些解释 here,但我找不到任何相关的注册表项。
所以我想要核选项。谁有一个?
你试过了吗?它可能会起作用,因为我认为它没有使用 GacUtil:
使用Windows界面
导航到位于 %systemdrive%\Windows\Assembly 的 GAC。
右键单击应用程序中包含的每个程序集文件,单击“卸载”,然后单击“是”进行确认。
我发现了别的东西,也看看这个:
MS Support
OpenXml SDK Productivity Tool 存在完全相同的问题,该工具仅存在于版本 2.5 中,但不存在于最新的 2.8.1 中。
使用 Nuget 包管理器为我在 Visual Studio 中的 ASP.Net 网页更新 SDK 后,我遇到了一个问题,即在发布过程中发布了旧的 "DocumentFormat.OpenXml V.2.5" dll 而不是新的一个(在我的 Visual Studio 项目中被正确引用)。
所以我决定先使用 "Programs and Features" 页面卸载旧的 SDK,然后再使用 MSI 安装程序文件的 "Uninstall"-Option。
两者均无效。不知何故,该 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!希望对大家有帮助!
我在 GAC 中有一个旧版本的企业库。它拒绝任何以 GACUTIL.EXE 声称以下内容而对其生命进行的尝试:
Microsoft (R) .NET Global Assembly Cache Utility. Version 3.5.30729.1 Copyright (c) Microsoft Corporation. All rights reserved.
Assembly: Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL
Unable to uninstall: assembly is required by one or more applications
Pending references:
SCHEME: <WINDOWS_INSTALLER> ID: <MSI> DESCRIPTION : <Windows Installer>
Number of assemblies uninstalled = 0 Number of failures = 0
我找到了关于这个主题的一些解释 here,但我找不到任何相关的注册表项。
所以我想要核选项。谁有一个?
你试过了吗?它可能会起作用,因为我认为它没有使用 GacUtil:
使用Windows界面
导航到位于 %systemdrive%\Windows\Assembly 的 GAC。
右键单击应用程序中包含的每个程序集文件,单击“卸载”,然后单击“是”进行确认。
我发现了别的东西,也看看这个: MS Support
OpenXml SDK Productivity Tool 存在完全相同的问题,该工具仅存在于版本 2.5 中,但不存在于最新的 2.8.1 中。
使用 Nuget 包管理器为我在 Visual Studio 中的 ASP.Net 网页更新 SDK 后,我遇到了一个问题,即在发布过程中发布了旧的 "DocumentFormat.OpenXml V.2.5" dll 而不是新的一个(在我的 Visual Studio 项目中被正确引用)。
所以我决定先使用 "Programs and Features" 页面卸载旧的 SDK,然后再使用 MSI 安装程序文件的 "Uninstall"-Option。
两者均无效。不知何故,该 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!希望对大家有帮助!