2011-10-11 22 views
7

Tengo un archivo de proceso por lotes para construir soluciones .net y estoy tratando de obtener el nivel de detalle que solo muestra qué proyecto está construyendo y las advertencias y/o errores pero también me gustaría ver el resumen al final con el número de advertencias y errores más el tiempo de compilación.msbuild: De todos modos para mostrar el resumen y usar la verbosidad = mínimo

que han intentado múltiples combinaciones de verbosidad y/v y/CPL pero parece que sólo se puede obtener una salida muy alta + resumen o mínima salida en la derecha y hay resumen

¿Alguna idea?

Gracias de antemano

+0

También he intentado esto mamny formas y no creo que sea posible ... Por curiosidad, ¿qué hay de malo con la salida estándar? He encontrado que es muy útil para depurar problemas de compilación y puede borrarse fácilmente con una llamada 'cls' –

+0

@NickNieslanik La salida estándar para la solución es grande, y el buffer de símbolo del sistema no es (sin modificaciones) lo suficientemente grande como para permitir revisa la salida de la consola completa, además de una gran cantidad de salida, como un archivo copiado, un archivo eliminado. No me interesa –

+3

¿Por qué no utiliza el registrador de archivos para solucionar el problema del búfer de solicitud de comando? eso aliviaría al menos uno de los problemas. Puede usar el registrador de archivos para hacer cosas como "registrar errores en un archivo, advertencias en otro e información regular en un tercero". –

Respuesta

3

Puede escribir un anotador personalizado como se explica aquí: http://msdn.microsoft.com/en-us/library/ms171471.aspx

Aquí hay un poco de código para empezar:

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."); 
    } 
} 

Este registrador registra advertencias, errores y Resume la cantidad de errores y advertencias. Deberá agregar un poco de código para el tiempo y los proyectos, para que sea exactamente lo que desea.

Para usarlo, se llaman MSBuild con los siguientes parametros añadidos a la misma:

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

un pensamiento sería la de extraer la información necesaria de un archivo de registro.

Así,

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 

Ejemplo:

@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 

Espero que esto ayude!

Cuestiones relacionadas