1

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

我想通过我的 tfs 构建定义中的 MSBuild 命令行选项在 Team Build 环境中定义这个变量,但我似乎找不到可行的方法。我找到了一个带有变量列表的答案(TFS 传递给构建脚本的 msbuild 属性列表),SolutionRoot 看起来很有希望。

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

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

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

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

4

2 回答 2

4

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

有关详细信息,请参阅Team Foundation Build 环境变量文档

于 2014-11-07T00:08:30.350 回答
0

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

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="xxxxxxxxxxxx">


    <PropertyGroup>
        <ProjectRoot Condition="$(ProjectRoot)==''"/>$(SolutionRoot)</ProjectRoot>
    </PropertyGroup>    
于 2013-11-01T20:03:08.363 回答