我正在尝试创建一个自定义 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 失败。
关于如何保留引号的任何想法?