Tfs 如何从team build中的msbuild引用工作区路径?

Tfs 如何从team build中的msbuild引用工作区路径?,tfs,msbuild,tfsbuild,Tfs,Msbuild,Tfsbuild,我有一大堆遗留项目文件,它们在include路径中使用$(ProjectRoot)变量来引用源树的根。我们在VisualStudio环境中定义该变量,以便桌面构建可以找到到正在使用的tfs工作区的方法 我想通过tfs构建定义中的MSBuild命令行选项在团队构建环境中定义此变量,但似乎找不到一种可行的方法。我找到了一个答案(),其中包含一系列变量和SolutionRoot,看起来很有希望 当我将生成定义的/p:ProjectRoot=$(SolutionRoot)放入MSBuild参数中时,Pr

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

我想通过tfs构建定义中的MSBuild命令行选项在团队构建环境中定义此变量,但似乎找不到一种可行的方法。我找到了一个答案(),其中包含一系列变量和SolutionRoot,看起来很有希望

当我将生成定义的
/p:ProjectRoot=$(SolutionRoot)
放入
MSBuild参数中时,ProjectRoot最终为空。我希望它扩展到类似于
D:\Builds\18\tfsprroject\BuildDef\src\

有并没有一种方法可以在TeamBuild中使用工作区源的根的值来定义我的变量

注意:我试图在TFS2010中解决这个问题,最后放弃并修改了BuildProcessTemplate,使用该上下文中可用的SourcesDirectory变量定义变量。我想我会再次尝试,希望在TFS2013中使用新模板而不进行修改,但我仍然感到困惑


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

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

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


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

$(SolutionRoot)

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

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


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

$(SolutionRoot)

使用TFS2013时,您应该能够在生成定义的MSBuild参数中指定
/p:ProjectRoot=$(TF\u BUILD\u SOURCESDIRECTORY)


有关详细信息,请参见。

使用TFS2013时,您应该能够在生成定义的MSBuild参数中指定
/p:ProjectRoot=$(TF_BUILD\u SOURCESDIRECTORY)


有关更多信息,请参阅。

如果我想在需要可用值的地方编辑项目文件的分数,这将起作用。(如果我们修正了拼写错误:should be==,not=,并且开始ProjectRoot标记的收尾角括号前的斜杠是多余的。我试图编辑注释来纠正这些错误,但是编辑已经在同行评审中进行了5天了,所以…)我修正了==。我是从物业组的记忆中走出来的。是的,你可能需要付钱。如果我想在需要可用值的地方编辑项目文件的分数,那就行了。(如果我们修正了拼写错误:should be==,not=,并且开始ProjectRoot标记的收尾角括号前的斜杠是多余的。我试图编辑注释来纠正这些错误,但是编辑已经在同行评审中进行了5天了,所以…)我修正了==。我是从物业组的记忆中走出来的。是的,你可能得付钱。