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

时间:2011-10-11 16:00:40

标签: msbuild

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

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

有什么想法吗?

提前致谢

2 个答案:

答案 0 :(得分:3)

您可以按照此处的说明编写自定义记录器: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

答案 1 :(得分: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

希望这有帮助!