2011-12-15 49 views
2

當我使用批處理文件調用msbuild.exe時,日誌功能正常工作。當通過PowerShell執行時,Msbuild日誌不起作用

但是,當它寫在PowerShell中,它不記錄任何東西。

以下是我正在使用的powershell腳本。任何想法如何解決這個問題?

# Script to invoke build 
. ./vsvars32.ps1 

Remove-Item "ViewBuild1.log" 

$MsbuildBinPath="C:\Windows\Microsoft.NET\Framework\v4.0.30319" 


$errorLogFileName="ViewBuild1Errors.log" 
$buildLogFileName="ViewBuild1.log" 

$MSBuildLogger="/flp1:Append;LogFile=ViewBuild1.log;Verbosity=Normal; /flp2:LogFile=ViewBuild1Errors.log;Verbosity=Normal;errorsonly" 

$MSBuildFile="Build.Targets" 

Write-Host -------------------------------------------- 
Write-Host Prepare for the build 
Write-Host -------------------------------------------- 
&"$MsbuildBinPath\Msbuild.exe" $MSBuildFile "/t:Prepare" "$MSBuildLogger" 
if ($LastExitCode -ne 0) { 
Write-Host "It failed, send a mail" 
} 
#$LastExitCode 

&"$MsbuildBinPath\Msbuild.exe" $MSBuildFile "/t:BuildAll" "$MSBuildLogger" 

Viewbuild1.log執行後根本沒有任何內容,儘管我在filelogger中使用了append選項。

回答

2

所有$MSBuildLogger作爲一個參數傳遞到的MSBuild例如爲:

PS> $MSBuildLogger="/flp1:Append;LogFile=ViewBuild1.log;Verbosity=Normal; /flp2:LogFile=ViewBuild1Errors.log;Verbosity= 
Normal;errorsonly" 
PS> echoargs $MSBuildLogger 
Arg 0 is </flp1:Append;LogFile=ViewBuild1.log;Verbosity=Normal; /flp2:LogFile=ViewBuild1Errors.log;Verbosity=Normal;erro 
rsonly> 

嘗試使用兩個變量來代替:

PS> $MSBuildLogger1="/flp1:Append;LogFile=ViewBuild1.log;Verbosity=Normal;" 
PS> $MSBuildLogger2="/flp2:LogFile=ViewBuild1Errors.log;Verbosity=Normal;errorsonly" 
PS> echoargs $MSBuildLogger1 $MSBuildLogger2 
Arg 0 is </flp1:Append;LogFile=ViewBuild1.log;Verbosity=Normal;> 
Arg 1 is </flp2:LogFile=ViewBuild1Errors.log;Verbosity=Normal;errorsonly> 

僅供參考,echoargs.exe距離PowerShell Community Extensions的工具。

+0

感謝它現在適合我。 – Samselvaprabu 2011-12-16 07:30:35

1

將整個MSBuild命令作爲PowerShell變量進行Concat,然後使用Invoke-Command來執行它。我這樣做,它效果很好!

$console_logging_switch = " /clp:Summary"";""Verbosity=$consoleLogLevel" 
$file_logging_switch = " /flp:Summary"";""Append"";""LogFile=build.$config.log"";""verbosity=normal" 
$file_errlog_switch = " /flp1:Append"";""LogFile=build.$config.err"";""errorsonly" 
$file_wrnlog_switch = " /flp2:Append"";""LogFile=build.$config.wrn"";""warningsonly" 
$logging_switch = $console_logging_switch + $file_logging_switch + $file_errlog_switch + $file_wrnlog_switch 
$targets_switch = " /t:$targets" 
$outdir_switch = " /p:OutDir=""$outdir""" 
$config_switch = " /p:Configuration=""$config""" 

if($skipCodeAnalysis){ $config_switch = " $config_switch /p:RunCodeAnalysis=false " } 
if($buildReferences){ $config_switch = " $config_switch /p:BuildProjectReferences=false " } 
if($filter -ne $null){ $config_switch = " $config_switch /p:ProjectFilter=$filter " } 
$options = $outdir_switch + $config_switch + $logging_switch + $targets_switch 

$cmd = "msbuild $project $options" 
Invoke-Expression $cmd 
+0

你的答案包含許多有用的信息。謝謝Nick – Samselvaprabu 2011-12-18 14:27:50

相關問題