我正在使用Wix 3.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文件?
发布于 2015-03-20 17:32:03
最后我一起回避了这个问题。我将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>发布于 2015-03-19 04:37:16
这里有一个…的方法
修改生成MyMsiFile MSI文件的项目,以生成一个MyMsiFile.wxs,该MyMsiFile.wxs定义包含该包的当前名称的PackageGroup。
然后,对于需要它的包项目,将MyMsiFile.wxs添加为连系文件,并在其包链中使用PackageGroupRef引用MSI。
此方法在MSI项目中保持对MSI包的详细知识,并远离包项目。
https://stackoverflow.com/questions/29121295
复制相似问题