【问题标题】:How to set dynamic/variable ToolPath for Wix prebuild step (msbuild) using Jenkins如何使用 Jenkins 为 Wix 预构建步骤 (msbuild) 设置动态/可变 ToolPath
【发布时间】:2013-08-01 22:23:35
【问题描述】:

我们有一台 WinXP Jenkins 构建机器,我正在迁移到 64 位 Win-7 机器。我们正在使用 Wix 通过 MSBuild 构建 msi。所有这些项目都位于 TFS 中。我们正在获取 TFS 变更集编号,以便在每个项目中设置为当前构建。我们的许多 [projectname].wixproj 文件中的相关行如下所示:

<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...我试图找出一种方法来使这个工具路径变量,这样我们就可以继续使用两台构建机器(现在),而无需将 wix 项目文件专用于其中一个(基本上不会破坏其中一台构建机器)。

这个 tf.exe 工具路径可以在 Jenkins 中在每台机器上轻松配置,但这不会传播到项目本身......除非有我不知道的路径变量?谢谢。

【问题讨论】:

    标签: visual-studio-2010 msbuild jenkins wix


    【解决方案1】:

    您可以在 msbuild 变量中计算根工具路径。 首先设置 windows 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>
    

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 2012-02-16
      • 2019-05-26
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多