我有一大堆遗留项目文件,它们在包含路径中使用 $(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 修改。除非有人在这里提出更好的答案。