使用WiX 3.6自动生成基于时间戳的内部版本号

时间:2012-04-05 14:15:26

标签: visual-studio-2010 wix wix3.6

我发现了一些使用Team构建设置环境自动增加构建号的方法,但是没有一个方法能让我满意,因为我有一个C ++ MFC应用程序,其中大部分方法都不起作用。

所以我考虑了另一种解决方案,这可能对我们的团队有用(因为它不是那么大):

我希望有这样的内部版本号:

$(major).$(minor).$(buildnumber) <!-- where buildnumber is like YYMMDDHHMM -->

我认为可以使用命令行中的预处理器变量设置$(major)$(minor)(或者预构建任务,例如从文件中将它们加入并将它们放入变量中),但构建号是根据构建应该是唯一的。

这种方法适用于本地计算机上的每个开发人员以及CI环境(在我们的案例中为TFS)。

有没有办法实现这个目标?或者是否有另一个想法自动生成增加的内部版本号(不一定基于时间戳)我还没有看到?

2 个答案:

答案 0 :(得分:2)

此要求的实施涉及两个部分:

1)构建自动生成ProductVerion属性

2)构建自动化将此属性传递给WiX构建。

对于#1,我喜欢使用TFS Versioning,但有许多解决方案可以满足您的需求。

对于#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>

在实际的wx中,我这样做:

 <Product Id="*" Name="IsWiX" Language="1033" Version="$(var.WiXProductVersion)"
          Manufacturer="ISWIX LLC" UpgradeCode="some upgrade code">
   <Package InstallerVersion="200" Compressed="yes" />

这个概念是MSFSroductVersion中的TFS传递,它被传递到编译器并映射到Version属性。对于本地开发人员构建,MSI只获得0.1.0作为版本(这是一个很好的指标,它不是官方版本)。

答案 1 :(得分:0)

我使用找到here

的“verbuild.exe”实用程序解决了它

按照该页面中的步骤操作:

  1. 创建初始版本标头文件:verbuild <version header file> -c
  2. 创建一个资源(.rc)文件:
    1. 包含步骤1中的头文件
    2. 包含更改以使用头文件中的正确版本替换.rc文件中的正确版本(例如,VERSION_FILE
  3. 在构建项目之前,更改构建以调用verbuild以更新内部版本号:
    • 我运行批处理文件来增加内部版本号:verbuild <version header file> %1 -xFP