如何强制程序集从GAC卸载?

时间:2012-01-12 00:37:54

标签: wix windows-installer gac

我使用WiX开发了一个简单的安装包,它将一个名为WBRT.Configuration的程序集安装到全局程序集缓存(GAC)中。安装文件时,卸载软件包时不会删除它。

我尝试以管理员身份运行命令提示符,使用msiexec / x指定msi文件名,使用msiexec / x指定产品代码。

使用/ l * v开关,没有错误:

Executing op: ActionStart(Name=MsiUnpublishAssemblies,Description=Unpublishing assembly information,Template=Application Context:[1], Assembly Name:[2]) Executing op: AssemblyUnpublish(,,AssemblyType=1,,AssemblyName=WBRT.Configuration,version="1.0.0.0",culture="neutral",publicKeyToken="361AD75BADC53912",processorArchitecture="MSIL",Descriptor=2-(xWui~z@UnhQuo-~Gh>S.OwM9Kim9x0ul%Ore=9) Executing op: ActionStart(Name=UnpublishFeatures,Description=Unpublishing Product Features,Template=Feature: [1])

WiX文件元素

<File Id="filB7155C3E9A241BEAFE09533364964732" KeyPath="yes" Assembly=".net" Source="$(var.Configuration.TargetDir)\WBRT.Configuration.dll" />

Orca中的MsiAssemblyName表

MSIAssemblyName

GAC中的文件

File in GAC

GAC中文件的版本标签

Version

完全难倒。有没有人有想法?

2 个答案:

答案 0 :(得分:1)

首先,验证您的程序集未被其他进程锁定     通过gacutil.exe

gacutil /u WBRT.Configuration

如果上面的确定,请确保文件父容器没有永久标志 -     Permanent="no"

<Component Shared="yes" Permanent="no" Guid="PUT-GUID-HERE" >
    <File Id="filB7155C3E9A241BEAFE09533364964732" KeyPath="yes" Assembly=".net" 
       Source="$(var.Configuration.TargetDir)\WBRT.Configuration.dll" />
</Component>

答案 1 :(得分:1)

我按照@Mohsen提到的步骤,删除了注册表项并从GAC卸载了DLL以解决冲突问题。

[HKLM \ SOFTWARE \ Classes \ Installer \ Assemblies \ Global]并运行gacutil / u dllname -And success。 我不知道副作用是什么。它对我有用,然后我跑了

gacutil -u dllThatIWantedToRemove