引用符 ("") で囲む必要がある特定のプロパティで msbuild を呼び出すカスタム TFS 2015 ビルド タスクを作成しようとしています。
問題の説明 - tl.exec 呼び出しと実際のコマンド ライン実行の間のどこかで引用符が削除され、コマンドが中断されます。
問題を引き起こしている typescript コードのスニペットを次に示します。
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 が失敗します。
引用符を保持する方法について何かアイデアはありますか?