Wix 强制安装程序升级GAC中的文件,而不考虑版本号

Wix 强制安装程序升级GAC中的文件,而不考虑版本号,wix,windows-installer,Wix,Windows Installer,我有一个WiX安装程序,需要将Interop.FOOBARLib.DLL的新位安装到GAC。问题是版本号与旧版本相同,并且新的位不会在升级时写入GAC。我们在InstallFinalize操作之后执行RemoveExistingProducts操作 我们无法将RemoveExistingProducts操作移动到安装的早期 foobar.dll组件不是我的组件,因此我无法增加类型库版本(这会导致互操作版本增加,所有这些问题都会消失) 有没有办法强制文件在GAC中升级,即使版本相同?我希望行为类似

我有一个WiX安装程序,需要将Interop.FOOBARLib.DLL的新位安装到GAC。问题是版本号与旧版本相同,并且新的位不会在升级时写入GAC。我们在InstallFinalize操作之后执行RemoveExistingProducts操作

我们无法将RemoveExistingProducts操作移动到安装的早期

foobar.dll组件不是我的组件,因此我无法增加类型库版本(这会导致互操作版本增加,所有这些问题都会消失)

有没有办法强制文件在GAC中升级,即使版本相同?我希望行为类似于“gacutil.exe/f”

该组件看起来像:

<Component Id="Interop.FOOBARLib.dll" Guid="{4E0C173E-34DF-4249-A3A6-5530047FA65B}" >
    <File Id="Interop. FOOBARLib.dll" Name="Interop.FOOBARLib.dll" KeyPath="yes" Assembly=".net"/>
</Component>

您可以在安装组件之前尝试执行自定义操作来删除文件。这是一个很好的例子,但下面的例子仍然应该说明这个想法

<CustomAction Id="ForceRemove" Script="vbscript" Execute="deferred">
  <![CDATA[
  Dim fso
  Set fso = CreateObject("Scripting.FileSystemObject")
  fso.DeleteFile("c:\somefile.dll")
  ]]>
</CustomAction>

<InstallExecuteSequence>
   <Custom Action='ForceRemove' Before='InstallFiles'/>
</InstallExecuteSequence>

您可以自己重新生成互操作程序集,并强制其获得更高版本,如下所示:

tlbimp /asmversion:1.2.3 /out:Interop.FOOBARLib.DLL foobar.dll 

您试图做的是在GAC中对程序集进行就地更新。要使其正常工作,两个Interop.FOOBARLib.dll库必须具有相同的程序集版本,但较新的dll必须具有更高的文件版本。文件版本属性必须包含在新MSI的MSI AssemblyName表中。默认情况下,Wix不包含此属性,因此您必须将以下参数添加到.wixproj文件中:

<SetMsiAssemblyNameFileVersion>True</SetMsiAssemblyNameFileVersion>
True
另见: