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
demandé sur Samselvaprabu 2011-12-15 21:21:24

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 .

2
répondu Keith Hill 2011-12-15 17:50:33

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
1
répondu Nick Nieslanik 2011-12-15 18:13:47