当尝试使用gaacutil .exe删除给定的程序集(在本例中为log4net.dll,但它应该适用于任何类似的情况)时,由于应用程序需要该程序集,该操作失败。但是,我不知道如何判断哪些应用程序实际上需要它。由于输出似乎表明,要求记录在MSI数据库/Windows安装程序中,似乎一些util将能够列出在MSI数据库中注册的所有GAC程序集(我可以用log4net.dll搜索条目)或允许我指定特定的GAC程序集,它将列出依赖关系(理想情况下,如果存在任何相关的依赖关系链:)
C: » gacutil /u log4net
Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Assembly: log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, 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
谢谢!
我从来没有找到任何好的东西。我所做的(工作,但糟糕)是运行procmon,看看gacutil正在访问什么,并注意到它击中了关键HKCRInstallerProducts 98D637EEF1AFF14586E779FE4C38C4D。当我在regedit中查看那个键时,它显示产品是"Plantronics Spokes Software"。
我进入了appwiz。然后gacutil/l log4net显示log4net不再在GAC中了。
我仍然很想找到一个更好的答案,但我想现在"运行procmon, filter to process=gacutil.exe和path下的HKCRInstallerProducts"至少比什么都没有好。