【问题标题】:msbuild: Anyway to show summary and use verbosity=minimalmsbuild:无论如何显示摘要并使用详细程度=最小
【发布时间】:2011-10-11 16:00:40
【问题描述】:

我有一个用于构建 .net 解决方案的批处理文件,我试图将详细程度降至最低,它只显示正在构建的项目以及任何警告和/或错误,但我还希望看到最后的摘要警告和错误的数量加上构建时间。

我已经尝试过详细程度和 /v 和 /cpl 的多种组合,但似乎你只能得到太多的输出+摘要或正确的最小输出而没有摘要

有什么想法吗?

提前致谢

【问题讨论】:

  • 我也尝试过这种方法,但认为不可能...出于好奇,标准输出有什么问题?我发现它对调试构建问题非常有帮助,并且可以通过“cls”调用轻松消除
  • @NickNieslanik 解决方案的标准输出很大,并且命令提示符缓冲区(未经修改)不够大,无法让您查看完整的控制台输出,还有很多输出,例如复制的文件, 删除了我不感兴趣的文件
  • 为什么不使用文件记录器来解决命令提示符缓冲区问题?这将至少缓解其中一个问题。您可以使用文件记录器来执行诸如“将错误记录到一个文件、将警告记录到另一个文件以及将常规信息记录到第三个文件”之类的事情

标签: msbuild


【解决方案1】:

您可以按照此处的说明编写自定义记录器:http://msdn.microsoft.com/en-us/library/ms171471.aspx

这里有一些代码可以帮助您入门:

public class SummaryLogger : Logger
{
    int warningCount = 0;
    int errorCount = 0;

    public override void Initialize(IEventSource eventSource)
    {
        eventSource.WarningRaised += eventSource_WarningRaised;
        eventSource.ErrorRaised += eventSource_ErrorRaised;
        eventSource.BuildFinished += eventSource_BuildFinished;
    }

    void eventSource_WarningRaised(object sender, BuildWarningEventArgs e)
    {
        warningCount++;
        Console.WriteLine("Warning: " + e.Message);
    }

    void eventSource_ErrorRaised(object sender, BuildErrorEventArgs e)
    {
        errorCount++;
        Console.WriteLine("Error: " + e.Message);
    }

    void eventSource_BuildFinished(object sender, BuildFinishedEventArgs e)
    {
        Console.WriteLine("MSBuild Finished: " + errorCount + " errors | " + warningCount + " warnings.");
    }
}

此记录器记录警告、错误并汇总错误和警告的数量。你需要为时间和项目添加一点代码,这样它就是你想要的。

要使用它,您调用 MSBuild 并添加以下参数:

/nologo /noconsolelogger /logger:pathTo/SummaryLogger.dll

【讨论】:

    【解决方案2】:

    一种想法是从日志文件中提取所需的信息。

    这样,

    Step 1: Redirect your msbuild outputs to a log.txt
    Step 2: At the end of the batch file run findstr cmd to look for desired text
    

    例子:

    @echo off
    setlocal
    ...
    MSBuild /nologo [path to project1 or sln1] [options] >> log.txt
    ...
    MSBuild /nologo [path to project2 or sln2] [options] >> log.txt
    ...
    findstr /irc:"Build*" /c:".*Warning(s)" /c:".*Error(s)" /c:"Time Elapsed.*" log.txt
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多