如何为使用Jenkins的Wix预构建步骤(msbuild)设置动态/可变ToolPath

问题描述:

我们有一个WinXP Jenkins构建机器,我正在转移到64位Win-7机器。我们利用Wix通过MSBuild构建msi。所有这些项目都位于TFS中。我们正在获取TFS变更集编号,以便将其设置为每个项目的当前版本。在我们的许多[项目] .wixproj文件有问题的线路是这样的:如何为使用Jenkins的Wix预构建步骤(msbuild)设置动态/可变ToolPath

<Target Name="BeforeBuild"> 
    <MSBuild.Community.Tasks.Tfs.TfsClient ToolPath="C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE" Command="history /stopafter:1 /version:T /format:detailed /recursive $(ProjectDir)"> 
     <Output TaskParameter="Changeset" PropertyName="Changeset" /> 
    </MSBuild.Community.Tasks.Tfs.TfsClient> 
    <Message Text="TFS ChangeSetNumber: $(Changeset)" /> 
    <PropertyGroup> 
     <DefineConstants>ChangesetNumber=$(Changeset)</DefineConstants> 
    </PropertyGroup> 
    </Target> 

这个工程我们的32位机器上很好,但在新的64位失败,因为TF.EXE刀具路径是现在c:\ Program Files(x86)...而不是C:\ program files ...我试图找出一种方法来制作这个toolpath变量,以便我们可以继续使用这两个构建机器(现在)而不用专门wix项目文件到其中一个(基本上没有破坏构建机器之一)。

这个tf.exe刀具路径在Jenkins的基于每台机器的基础上很容易配置,但是这不会传播到项目本身......除非有一个路径变量我不知道?谢谢。

您可以计算msbuild变量中的根工具路径。 首先设置窗口64位子文件夹的默认值,然后根据环境变量设置值为32位,其中该变量在32位机器中未定义。

<PropertyGroup> 
    <MyProgramFiles>C:\Program Files (x86)\</MyProgramFiles> 
    <MyProgramFiles Condition=" '$(CommonProgramW6432)' == '' ">C:\Program Files\</MyProgramFiles> 
</PropertyGroup> 

所以通过该变量你.wixproj看起来像:

<Target Name="BeforeBuild"> 
    <PropertyGroup> 
     <MyProgramFiles>C:\Program Files (x86)\</MyProgramFiles> 
     <MyProgramFiles Condition=" '$(CommonProgramW6432)' == '' ">C:\Program Files\</MyProgramFiles> 
    </PropertyGroup> 
    <MSBuild.Community.Tasks.Tfs.TfsClient ToolPath="$(MyProgramFiles)\Microsoft Visual Studio 10.0\Common7\IDE" Command="history /stopafter:1 /version:T /format:detailed /recursive $(ProjectDir)"> 
     <Output TaskParameter="Changeset" PropertyName="Changeset" /> 
    </MSBuild.Community.Tasks.Tfs.TfsClient> 
    <Message Text="TFS ChangeSetNumber: $(Changeset)" /> 
    <PropertyGroup> 
     <DefineConstants>ChangesetNumber=$(Changeset)</DefineConstants> 
    </PropertyGroup> 
</Target> 

我希望这可以帮助您。