【发布时间】:2015-12-23 20:01:59
【问题描述】:
为了在基于新 Build 2015 任务的构建中模拟 TFS 2013 的 XAML 构建中的“PerProject”选项,我希望能够将 SolutionName 传递给 msbuild 命令行参数,而不必每次都手动设置它.
我想做这样的事情:
/p:OutputPath=$(Build.BinariesDirectory)\$(SolutionName)\
我希望 MsBuild 在哪里推断 $(SolutionName) 参数。但是当在命令行上传递它时,新的任务运行器将用正确的目标路径替换$(Build.BinariesDirectory),并单独留下$(SolutionName)。不幸的是,MsBuild 随后也离开了该属性:
Copying file from "obj\Debug\TFSBuild.exe" to "bin\debug\$(SolutionName)\TFSBuild.exe".
TFSBuild -> b\$(SolutionName)\TFSBuild.exe
Copying file from "obj\Debug\TFSBuild.pdb" to "b\$(SolutionName)\TFSBuild.pdb".
我不记得有什么方法可以将属性传递到命令行并让它进行后期扩展...有什么提示吗?
对于那些希望模仿 SingleFolder 或 AsConfigured 的人来说,这些都很容易:
SingleFolder -> /p:OutputPath="$(Build.BinariesDirectory)"
Asconfigured -> don't pass OutputPath
PerProject -> /p:OutputPath="$(Build.BinariesDirectory)\HARDCODESOLUTIONNAME"
【问题讨论】:
-
如何传递
/p:MyOutputPathBaseDir=$(Build.BinariesDirectory)然后在项目文件中将OutputPath 属性设置为$(MyOutputPathBaseDir)\$(SolutionName)? -
这需要我编辑所有项目文件,这可行,但我不妨插入自己的变量并使用 AsConfigured
-
这将需要我编辑所有项目文件不一定,msbuild 有多个扩展点,它可以导入您在命令行上传递的任意文件。在您的情况下,该文件只会按照我的描述设置属性。
-
如何从命令行导入额外的目标文件?这会很有帮助