【问题标题】:How can I refer to the workspace path from msbuild in team build?如何在团队构建中引用 msbuild 的工作区路径?
【发布时间】:2013-11-12 04:28:07
【问题描述】:

我有一大堆遗留项目文件,它们在包含路径中使用 $(ProjectRoot) 变量来引用源代码树的根。我们在 Visual Studio 环境中定义该变量,以便桌面构建可以找到使用中的 tfs 工作区的方式。

我想通过 tfs 构建定义中的 MSBuild 命令行选项在 Team Build 环境中定义此变量,但我似乎找不到可行的方法。我找到了一个包含变量列表的答案 (List of msbuild properties TFS passes to a build script),SolutionRoot 看起来很有希望。

当我将/p:ProjectRoot=$(SolutionRoot) 放入构建定义的MSBuild Arguments 时,ProjectRoot 最终为空。我希望它扩展到 D:\Builds\18\TfsProject\BuildDef\src\

有没有办法用 Team Build 中工作区源的根值来定义我的变量?

注意:我试图在 TFS2010 中解决这个问题,最后放弃并修改了 BuildProcessTemplate 以使用该上下文中可用的 SourcesDirectory 变量来定义变量。我想我会再试一次,希望在不修改的情况下使用 TFS2013 中的新模板,但我仍然很难过。

更新:如果我要取消引用的变量实际上被传递给 msbuild,那么我在 MSBuild 参数中的语法会起作用。我引用的另一篇文章中的列表似乎不再有效。查看详细的 Team Build 日志,似乎在 Team Build 中传递给 msbuild 的唯一变量是 OutDir、BuildId、BuildLabel、BuildTimestamp、BuildSourceVersion 和 BuildDefinition。这些都没有为我提供当前 msbuild 脚本在构建时所需的信息,所以我要么重新处理所有项目文件,要么继续使用我一直在使用的 BuildProcessTemplate 修改。除非有人在这里提出更好的答案。

【问题讨论】:

    标签: tfs msbuild tfsbuild


    【解决方案1】:

    使用 TFS2013 时,您应该能够在构建定义的 MSBuild 参数中指定 /p:ProjectRoot=$(TF_BUILD_SOURCESDIRECTORY)

    更多信息请参见the Team Foundation Build environment variables documentation

    【讨论】:

      【解决方案2】:

      使用其他属性设置属性。使用条件仅在其为空时设置它。

      <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="xxxxxxxxxxxx">
      
      
          <PropertyGroup>
              <ProjectRoot Condition="$(ProjectRoot)==''"/>$(SolutionRoot)</ProjectRoot>
          </PropertyGroup>    
      

      【讨论】:

      • 如果我想编辑需要可用值的项目文件的分数,这将起作用。 (如果我们修正错别​​字:应该是 ==,而不是 =,并且开始 ProjectRoot 标记的右尖括号之前的斜线是多余的。我试图编辑评论以更正这些,但编辑一直在同行评审中现在还有 5 天...)
      • 我修复了 ==。我是在 PropertyGroup 上记忆的。是的,你可能需要付钱给吹笛者。
      猜你喜欢
      • 2010-09-18
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 2014-06-16
      • 1970-01-01
      • 2012-10-31
      相关资源
      最近更新 更多