msbuild:无论如何都要显示摘要并使用verbosity=minimal

msbuild:无论如何都要显示摘要并使用verbosity=minimal,msbuild,Msbuild,我有一个用于构建.net解决方案的批处理文件,我正在尝试将详细程度降至最低,它只显示正在构建的项目以及任何警告和/或错误,但也希望在最后看到警告和错误数量加上构建时间的摘要 我已经尝试过多个verbosity和/v和/cpl的组合,但似乎您只能得到太多的输出+摘要或正确的最小输出而没有摘要 有什么想法吗 提前感谢您可以编写自定义记录器,如下所述: 这里有一些代码可以帮助您开始: public class SummaryLogger : Logger { int warningCount

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

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

有什么想法吗


提前感谢

您可以编写自定义记录器,如下所述:

这里有一些代码可以帮助您开始:

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

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

像这样,

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

希望这有帮助

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