如何在Wix包中引用动态命名的MSI文件

如何在Wix包中引用动态命名的MSI文件,wix,windows-installer,Wix,Windows Installer,我正在使用WIX3.9,让它构建3个MSI文件,然后是一个包含每个MSI文件的包。我已经升级了主安装程序项目,使用所述的技术和将版本号自动包含在MSI文件名中。我的Wix项目中的BeforeBuild任务从第二个链接开始如下 <!-- Set Output file name to include version--> <Target Name="BeforeBuild"> <GetAssemblyIdentity AssemblyFiles="$(Soluti

我正在使用WIX3.9,让它构建3个MSI文件,然后是一个包含每个MSI文件的包。我已经升级了主安装程序项目,使用所述的技术和将版本号自动包含在MSI文件名中。我的Wix项目中的BeforeBuild任务从第二个链接开始如下

<!-- Set Output file name to include version-->
<Target Name="BeforeBuild">
  <GetAssemblyIdentity AssemblyFiles="$(SolutionDir)WindowsClient\bin\$(Configuration)\MyApp.exe">
    <Output TaskParameter="Assemblies" ItemName="AssemblyVersions" />
  </GetAssemblyIdentity>
  <CreateProperty Value="$(OutputName)%(AssemblyVersions.Version)">
    <Output TaskParameter="Value" PropertyName="TargetName"/>
  </CreateProperty>
  <CreateProperty Value="$(TargetName)$(TargetExt)">
    <Output TaskParameter="Value" PropertyName="TargetFileName"/>
  </CreateProperty>
  <CreateProperty Value="$(TargetDir)$(TargetFileName)">
    <Output TaskParameter="Value" PropertyName="TargetPath"/>
  </CreateProperty>
</Target>`
但是这导致我的包在下面的行失败

<MsiPackage Id="MyMsiFile" Name="$(var.WixInstaller.TargetFileName)" SourceFile="$(var.WixInstaller.TargetDir)"/>
它失败地说它找不到文件MyMsiFile.msi,这是真的,因为它现在被命名为MyMsiFile1.0.1.msi。如何在Bundle文件中引用具有动态名称的MSI文件?

这里有一种方法

修改生成MyMsiFile MSI文件的项目,以同时生成MyMsiFile.wxs,该文件定义了包含当前名称的包的包组

然后,对于需要它的捆绑包项目,将MyMsiFile.wxs作为文件添加,并在其捆绑包链中使用PackageGroupRef引用MSI


这种方法将MSI包的详细信息保存在MSI项目中,远离捆绑项目。

我最终避免了这个问题。我将msi项目更改为复制msi,并将版本号附加到副本。通过这种方式,我得到了一个带有版本号的msi文件和一个没有版本号的msi文件,以便捆绑到更完整的安装程序中。我删除了上面发布的BeforeBuild代码,并将其替换为

<Target Name="AfterBuild">
  <GetAssemblyIdentity AssemblyFiles="$(SolutionDir)WindowsClient\bin\$(Configuration)\MyApp.exe">
    <Output TaskParameter="Assemblies" ItemName="AssemblyVersions" />
  </GetAssemblyIdentity>
  <Copy SourceFiles=".\bin\$(Configuration)\$(OutputName).msi" DestinationFiles=".\bin\$(Configuration)\$(OutputName)%(AssemblyVersions.Version).msi" />
</Target>

你能提供答案第一部分的代码/链接吗?你如何创建MSI文件的文件名?使用我在问题中提供的第二个链接中的“BeforeBuild”方法。