0xDEADBEEF
0xDEADBEEF

Reputation: 868

How to have MSBuild quiet output but with error/warning summary

I'm simply trying to get no output from a build except the error/warning summary at the end. Not exactly a demanding task.

The command line:

msbuild.exe /nologo /verbosity:quiet /consoleloggerparameters:summary project.sln

As described here: http://msdn.microsoft.com/en-us/library/ms164311.aspx It appears MSBuild isn't working as it should - there is no output at all. with /verbosity:normal there is tonnes of output and a useful error/warning summary at the end, is there any way of just not seeing the noise?

MSBuild reports version 12.0.21005.1 as distributed with Studio Express 2013.

Upvotes: 36

Views: 24946

Answers (4)

geometrian
geometrian

Reputation: 15397

[Obsolete:] Use /verbosity:minimal instead. This prints much less, but not nothing.

Upvotes: 10

mahesh
mahesh

Reputation: 708

Use /consoleloggerparameters:ErrorsOnly or clp:ErrorsOnly to solve your problem.

Upvotes: 22

Steve
Steve

Reputation: 11973

late to the party, but MSBuild has the option /verbosity:quiet now and it doesn't print out anything beside error and warnings.

    You can specify the following verbosity levels: 
    q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]

Documentation source: https://msdn.microsoft.com/en-us/library/ms164311.aspx

Upvotes: 25

stijn
stijn

Reputation: 35921

I don't think there is a set of options thet matches what you want exactly. But since you're on the commandline anyway, using findstr/grep/tail and the likes is always a good option. Here's an example using powershell to display the summary and what comes after it

powershell -Command "msbuild.exe /nologo project.sln |
                     Select-String 'Build succeeded|failed' -Context 0, 100"

Another possibility is to use a custom logger, which is not hard as it sounds at first and there are tons of examples on the net. Plus it has the benefit you can get any custom output you want. Here's code to replicate the summary:

using System;
using Microsoft.Build.Utilities;
using Microsoft.Build.Framework;

public class CustomLogger : Logger
{
  private int warnings = 0;
  private int errors = 0;

  public override void Initialize( IEventSource eventSource )
  {
    eventSource.WarningRaised += ( s, e ) => ++warnings;
    eventSource.ErrorRaised += ( s, e ) => ++errors;
    eventSource.BuildFinished += ( s, e ) =>
    {
      Console.WriteLine( errors == 0 ? "Build succeeded." : "Build failed." );
      Console.WriteLine( String.Format( "    {0} Warning(s)", warnings ) );
      Console.WriteLine( String.Format( "    {0} Error(s)", errors ) );
    };
  }
}

Put this in a file CustomLogger.cs and compile it:

csc /t:library CustomLogger.cs /reference:Microsoft.Build.Utilities.v4.0.dll;Microsoft.Build.Framework.dll

which creates a CustomLogger dll file. Now use it like this:

msbuild /nologo /logger:CustomLogger.dll /noconsolelogger project.sln

Upvotes: 13

Related Questions