添加版本以在WiX中构建后事件

时间:2014-01-13 18:28:43

标签: visual-studio wix

我是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变量或其他此类变量。

1 个答案:

答案 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/