2013-11-01 29 views
1

我有一堆传统项目文件,它们在包含路径中使用$(ProjectRoot)变量来引用源代码树的根目录。我们在Visual Studio环境中定义变量,以便桌面构建可以找到通往正在使用的tfs工作区的路径。如何在团队构建中引用msbuild中的工作空间路径?

我想通过我的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参数中的语法将工作,如果我dereferencing变量实际上被传递给msbuild。我引用的其他帖子中的列表似乎不再有效。查看详细的Team Build日志,它看起来像Team Build中传递给msbuild的唯一变量是OutDir,BuildId,BuildLabel,BuildTimestamp,BuildSourceVersion和BuildDefinition。这些信息都没有给出我当前msbuild脚本在构建时需要的信息,所以我不能重写我们所有的项目文件或继续使用我一直使用的BuildProcessTemplate修改。除非有人在这里得到更好的答案。

回答

0

使用其他属性设置属性。如果条件为空,则使用条件进行设置。

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


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

如果我想编辑需要可用值的项目文件的分数,这将起作用。 (如果我们修正了错别字:应该是==,not =,并且在打开的ProjectRoot标签的右角括号之前的斜线是多余的。我尝试编辑注释以更正这些错误,但编辑处于同行评审状态现在5天了...) –

+1

我修正了==。我从PropertyGroup的记忆中走出。是的,你可能不得不支付吹笛者。 – granadaCoder

相关问题