我是WiX的新手,在实现我认为应该非常简单的方面遇到了一些麻烦。我在Visual Studio 2013中使用的是WiX v3.8。总的来说,我正在努力实现一个地方,我可以更改安装程序的版本,这将在整个WiX项目中传播。
在WiX项目的项目属性中=>构建标签=> “定义预处理器变量”文本框我有:
ProjectVersion=3.6.7.0
但是,遇到问题的地方是在Post-Build Events中失败的时候:
copy !(TargetPath) "C:\Development\Release Builds\MyProject\$(TargetName) $(var.ProjectVersion)$(TargetExt)"
我一直在搜索互联网,但无法找到问题的解决方案。也许我只是不知道该问什么?
我的问题是:如何让这个后期制作活动有效?我究竟做错了什么?我想要做的就是在后期构建事件中轻松更改ProjectVersion变量或其他此类变量。
答案 0 :(得分:3)
这不是你要求的,但也许它可以帮助你实现你想要的目标?
我做的与你的做法略有不同。我从与wix安装程序捆绑在一起的'main'程序集中读取了该版本,将msi文件名重命名为包含版本字符串,然后在构建后事件中对其进行签名。
资源:
https://stackoverflow.com/a/19371257/767926
https://stackoverflow.com/a/12323770/767926
要重命名msi以包含文件名中的版本(wixproj):
<Target Name="BeforeBuild">
<GetAssemblyIdentity AssemblyFiles="$(SolutionDir)'HARDCODED PATH'\bin\$(Configuration)\'HARDCODED NAME OF ASSEMBLY'">
<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>
重命名后签署msi(wixproj):
<PropertyGroup>
<PostBuildEvent>"C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\signtool.exe" sign /sha1 'CERTIFICATEHASH' /v /t http://timestamp.verisign.com/scripts/timstamp.dll /d "DESCRIPTION" "$(ProjectDir)\bin\$(ConfigurationName)\'HARCODED PARTIAL MSI NAME'@(AssemblyVersions->'%(Version)').msi"</PostBuildEvent>
</PropertyGroup>
在wixproj文件中手动添加/编辑这个后期构建事件非常重要(使用编辑器),如果你使用GUI它会搞乱:
@(AssemblyVersions->'%(Version)')
此外,如果您想签署MSI,请确保添加MSI的说明,否则UAC提示将显示临时文件名。资源:http://kentie.net/article/wixtipstricks/