【问题标题】:How to change msbuild working directory in TFS 2013 workflow如何在 TFS 2013 工作流中更改 msbuild 工作目录
【发布时间】:2016-02-04 04:46:34
【问题描述】:

我有一个 TFS 2013 构建 xaml 工作流,最终为我要构建的每个解决方案调用一次 Microsoft.TeamFoundation.Build.Workflow.Activities.MSBuild 活动。当调用 msbuild.exe 时,它​​的工作目录是正在构建的当前解决方案的工作目录。当以“诊断”详细程度运行 msbuild 时,我可以通过“MSBuildStartupDirectory”属性看到这一点。

不幸的是,当 msbuild.exe 启动时,我需要将 msbuild.exe 的工作放在其他地方。这是因为我使用了 MSBuild SonarQube 运行器,它对调用 msbuild 的目录施加了约束。

我查看了“msbuild”活动,但无法控制工作目录。还有其他方法可以控制此活动的工作目录吗?

【问题讨论】:

    标签: msbuild tfsbuild


    【解决方案1】:

    我已经有一段时间没有编辑构建过程模板了,但我相信您可以使用一个仅在 CMD 中执行命令并提供完整 MSBuild 命令的活动。我确信您需要设置大量变量才能使其正常工作。

    您是否考虑过在 Post-build 脚本中使用 PowerShell 脚本来执行 SonarQube,而不是编辑构建过程模板?

    【讨论】:

    • 对 CMD 的好建议。但是,如果我需要通过修改工作流的路径,我宁愿通过调用可以完成所有操作的 powershell 脚本来替换很多活动(启动 sonarQube 运行器,编译,测试,停止 SonarQube 运行器)。这将简化工作流程并将大部分构建逻辑放在我的 PowerShell 脚本中。我还没有,但我认真考虑过。
    • 我们一直避免更改构建过程模板,因此我们不必长期“拥有”它们。我们已经能够使用 MSBuild 或 Pre/Post-build 脚本成功扩展 TFS 构建。
    【解决方案2】:

    我还没有找到任何方法来控制 msbuild 的工作目录。但是因为我知道工作目录将是 msbuild 正在构建的项目的目录,所以我在我的工作区的根目录(我的工作目录必须是)创建了一个新的 proj 文件,并且只从我的工作流程。然后这个新的 proj 文件构建了我所有的其他解决方案。这样,我的工作目录对于所有正在构建的解决方案都是相同的。

    这是我的顶级项目文件的示例:

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
      <ItemGroup>
        <Solutions Include="**\*.sln"/>
      </ItemGroup>
    
      <Target Name="Build">
        <MSBuild Projects="@(Solutions)" Targets="Build"/>
      </Target>      
    </Project>
    

    但请注意,这样做可能会影响为每个解决方案提供的输出目录 (OutDir)。所以你可能想做这样的事情:

    <MSBuild Projects="@(Solutions)" Targets="Build" Properties="OutDir=$(OutDir)..\%(Solutions.Filename)"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 2022-07-15
      • 2017-01-26
      • 2015-07-09
      • 2023-03-30
      相关资源
      最近更新 更多