2013-08-01 43 views
0

我們有一個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的基於每臺機器的基礎上很容易配置,但是這不會傳播到項目本身......除非有一個路徑變量我不知道?謝謝。

回答

1

您可以計算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> 

我希望這可以幫助您。

相關問題