【发布时间】: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 修改。除非有人在这里提出更好的答案。
【问题讨论】: