如何在团队构建中引用msbuild的工作空间路径?

时间:2013-11-01 00:16:06

标签: tfs msbuild team-build

我有一大堆遗留项目文件,它们在include路径中使用$(ProjectRoot)变量来引用源树的根。我们在visual studio环境中定义变量,因此桌面构建可以找到正在使用的tfs工作区。

我想在团队构建环境中通过我的tfs构建定义中的MSBuild命令行选项定义此变量,但我似乎无法找到适用的方法。我找到了一个带有变量列表的答案(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中的新模板而不进行修改,但我仍然难以接受。

UPDATE :如果我正在解除引用的变量实际传递给msbuild,那么我在MSBuild参数中的语法就会有效。我引用的其他帖子中的列表似乎不再有效。查看详细的Team Build日志,看起来在Team Build中传递给msbuild的唯一变量是OutDir,BuildId,BuildLabel,BuildTimestamp,BuildSourceVersion和BuildDefinition。这些都没有给我当前msbuild脚本在构建时需要的信息,所以我坚持要么重新编写我们所有的项目文件,要么继续我一直在使用的BuildProcessTemplate修改。除非有人在这里找到更好的答案。

2 个答案:

答案 0 :(得分:4)

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

有关详细信息,请参阅the Team Foundation Build environment variables documentation

答案 1 :(得分:0)

使用other属性设置属性。如果条件为空,则使用条件仅设置它。

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


    <PropertyGroup>
        <ProjectRoot Condition="$(ProjectRoot)==''"/>$(SolutionRoot)</ProjectRoot>
    </PropertyGroup>