我正在尝试创建一个自定义TFS 2015构建任务,该任务将使用需要引号(“”)的某些属性调用msbuild。
问题陈述 - 在tl.exec调用和实际命令行执行之间的某处删除引号,这会破坏命令。
以下是导致问题的打字稿代码片段:
let msbuildArgs = "AssemblyInfoUpdater.proj /p:SearchRoot=" + searchRoot
+ ";IncludePattern=\"" + includePattern
+ "\";Major=" + tl.getVariable("Major")
+ ";Minor=" + tl.getVariable("Minor")
+ ";Build=" + tl.getVariable("Build")
+ ";Revision=" + tl.getVariable("Revision")
+ ";BinariesRoot=" + tl.getVariable("Build.BinariesDirectory")
+ ";TeamProject="+ tl.getVariable("System.TeamProject");
let result = tl.exec(`${tl.getVariable("MSBuild")}\\msbuild.exe`, msbuildArgs);
如您所见,IncludePattern需要用引号括起来(因此转义引号(\“))。
以下是运行时得到的结果:
##vso[task.debug]exec tool: C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe
##vso[task.debug]Arguments:
##vso[task.debug] AssemblyInfoUpdater.proj
##vso[task.debug] /p:SearchRoot=d:\Git\agent-tasks\Tests\AssemblyInfoUpdater\build\src;IncludePattern=**\assemblyinfo.*;Major=2;Minor=3;Build=100;Revision=50;BinariesRoot=d:\Git\agent-tasks\Tests\AssemblyInfoUpdater\build\bin;TeamProject=Synergis
[command]C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe AssemblyInfoUpdater.proj /p:SearchRoot=d:\Git\agent-tasks\Tests\AssemblyInfoUpdater\build\src;IncludePattern=**\assemblyinfo.*;Major=2;Minor=3;Build=100;Revision=50;BinariesRoot=d:\Git\agent-tasks\Tests\AssemblyInfoUpdater\build\bin;TeamProject=Synergis
由于参数无效,引号被删除,msbuild失败。
关于如何保留报价的任何想法?