関連する質問はこちら.
これは、mvc3 アプリケーションのコンパイルでは適切に機能します。
task Compile
{
$config = $script:siteConfig.config
exec { & "C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" $webproject_path `
/p:Configuration=$config /p:WebProjectOutputDir="$publish_dir" `
/p:Outdir="$out_dir" /p:CleanWebProjectOutputDir=False `
/T:_WPPCopyWebApplication /T:ResolveReferences /verbosity:quiet /nologo }
}
これらのパス変数はすべてスクリプト プロパティです。ただし、これらの計算されたパスにスペースが導入された場合 (たとえば、プロジェクトが C:\Projects\ から C:\Users\ASDFG1\Documents\Visual Studio 2010\Projects に移動された場合)、msbuild は複数のプロジェクト ファイルがあると見なします。これは理にかなっていますが、何かが欠けている必要があります。解析された変数を引用符で囲むことは、それほど難しいことではありません。
試したバリエーション
exec { Invoke-Expression "& C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe '$webproject_path' /p:Configuration=$config /p:WebProjectOutputDir='$publish_dir' /p:Outdir='$out_dir' /p:CleanWebProjectOutputDir=False /T:_WPPCopyWebApplication /T:ResolveReferences /verbosity:quiet /nologo" }
exec { C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe "`"$webproject_path`"" `
/p:Configuration=$config /p:WebProjectOutputDir="`"$publish_dir`"" `
/p:Outdir="`"$out_dir`"" /p:CleanWebProjectOutputDir=False `
/T:_WPPCopyWebApplication /T:ResolveReferences /verbosity:quiet /nologo }