该要求的实施涉及两个部分:
1) 构建自动化生成 ProductVerion 属性
2) 将此属性传递给 WiX 构建的构建自动化。
对于#1,我喜欢使用TFS 版本控制,但有很多解决方案可以满足您的需求。
对于#2,我将这样的代码放在 .wixproj 中:
<PropertyGroup>
<MSIProductVersion Condition=" '$(MSIProductVersion)' == '' ">0.1.0</MSIProductVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DefineConstants>Debug;WiXProductVersion=$(MSIProductVersion)</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<DefineConstants>WiXProductVersion=$(MSIProductVersion)</DefineConstants>
</PropertyGroup>
在实际的 wxs 中,我这样做:
<Product Id="*" Name="IsWiX" Language="1033" Version="$(var.WiXProductVersion)"
Manufacturer="ISWIX LLC" UpgradeCode="some upgrade code">
<Package InstallerVersion="200" Compressed="yes" />
这个概念是 TFS 在 MSIProductVersion 中传递,它被传递到编译器并映射到 Version 属性。对于本地开发人员构建的 MSI,只需获取 0.1.0 作为版本(这是一个很好的指标,表明它不是官方构建)。