【问题标题】:Msbuild log doesn't work when executed through powershell通过powershell执行时,msbuild日志不起作用
【发布时间】:2011-12-15 17:21:24
【问题描述】:

当我使用批处理文件调用 msbuild.exe 时,日志功能可以正常工作。

但是当它用 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 在执行后根本没有内容。

【问题讨论】:

    标签: powershell msbuild


    【解决方案1】:

    $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 的实用程序。

    【讨论】:

      【解决方案2】:

      将整个 MSBuild 命令连接为 powershell var,然后使用 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
      

      【讨论】:

        猜你喜欢
        • 2018-07-08
        • 2010-11-03
        • 1970-01-01
        • 2015-05-11
        • 1970-01-01
        • 2022-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多