Msbuild log ne fonctionne pas lorsqu'il est exécuté par powershell
quand j'utilise le fichier batch pour invoquer msbuild.exe, la fonctionnalité de journalisation fonctionne très bien.
mais quand il est écrit en powershell ,il n'enregistre rien.
voici le script powershell que j'utilise . Une idée de comment résoudre ce problème?
# Script to invoke build
. ./vsvars32.ps1
Remove-Item "ViewBuild1.log"
$MsbuildBinPath="C:WindowsMicrosoft.NETFrameworkv4.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 --------------------------------------------
&"$MsbuildBinPathMsbuild.exe" $MSBuildFile "/t:Prepare" "$MSBuildLogger"
if ($LastExitCode -ne 0) {
Write-Host "It failed, send a mail"
}
#$LastExitCode
&"$MsbuildBinPathMsbuild.exe" $MSBuildFile "/t:BuildAll" "$MSBuildLogger"
Viewbuild1.log n'a pas de contenu du tout après l'exécution, bien que j'ai utilisé l'option append dans filelogger.
2 réponses
la totalité de $MSBuildLogger
est transmise en un seul argument à MSBuild par exemple:
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>
essayez d'utiliser deux variables à la place:
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>
POUR INFO, echoargs.exe est un utilitaire du PowerShell Community Extensions .
Concatte L'ensemble de la commande MSBuild comme un var powershell et utilise ensuite la commande Invoke-Command pour l'exécuter. - Je le faire et il fonctionne très bien!
$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