1
這適用於編譯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 }
只是一個建議:調用表達式是很少在一個不錯的選擇運行命令和應用程序。 – Joey 2012-04-18 16:54:05
謝謝,能否詳細說明一下?我正在盡一切可能使其工作,但會想知道你的邏輯。 – 2012-04-18 17:04:19
這通常是問題所在。 PowerShell對本機命令的參數處理在某些時候有點奇怪,而且人們通常會嘗試任何他們能想到的方法來使其工作,而且經常會有「Invoke-Expression」潛入其中。關鍵是Invoke-Expression不會改變任何有關該命令運行,它只是增加了一個間接的層,有時會引發自己的問題。除非在運行時真正構建PowerShell命令才能執行,否則最好避免使用Invoke-Expression。 – Joey 2012-04-18 17:11:58