我是 WiX 的新手,在实现我认为应该非常简单的事情时遇到了一些困难。我在 Visual Studio 2013 中使用 WiX v3.8。总的来说,我想要实现的目标是拥有一个可以更改安装程序版本的地方,并且这将在整个 WiX 项目中传播。
在 WiX 项目的项目属性 =>“构建”选项卡 =>“定义预处理器变量”文本框中,我有:
ProjectVersion=3.6.7.0
但是,当失败时,我遇到问题的是构建后事件:
copy !(TargetPath) "C:\Development\Release Builds\MyProject\$(TargetName) $(var.ProjectVersion)$(TargetExt)"
我一直在互联网上搜索,但无法找到解决我的问题的方法。也许我只是不知道该问什么?
我的问题是:如何使这个构建后活动正常进行?我究竟做错了什么?我想做的就是能够轻松更改 ProjectVersion 变量或构建后事件中的另一个此类变量。
这并不完全是您所要求的,但也许它可以帮助您实现您想要的?
我的做法与你的做法略有不同。我从与 wix 安装程序捆绑在一起的“主”程序集中读取版本,重命名 msi 文件名以包含版本字符串,然后在构建后事件中对其进行签名。
资源:
要重命名 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>
Run Code Online (Sandbox Code Playgroud)
要在重命名后签署 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>
Run Code Online (Sandbox Code Playgroud)
在 wixproj 文件中手动添加/编辑此构建后事件非常重要(使用编辑器),如果您使用 GUI,它会搞砸:
@(AssemblyVersions->'%(Version)')
Run Code Online (Sandbox Code Playgroud)
另外,如果您想签署 MSI,请确保添加 MSI 的描述,否则 UAC 提示将显示临时文件名。资源: http: //kentie.net/article/wixtipstricks/
| 归档时间: |
|
| 查看次数: |
4085 次 |
| 最近记录: |