2011-10-11 9 views
7

Ho un file batch per la creazione di soluzioni .net e sto cercando di ottenere il livello di verbosità minimo che mostra solo quale progetto sta costruendo e qualsiasi avvertenza e/o errore ma vorrebbe anche vedere il riepilogo alla fine con il numero di avvisi ed errori più il tempo di costruzione.msbuild: Comunque per mostrare il riepilogo e usare verbosity = minimal

ho provato molteplici combinazioni di prolissità e/v e/CPL ma sembra si può ottenere solo troppa uscita + riassunto o uscita minima a destra e senza sintesi

Tutte le idee?

Grazie in anticipo

+0

Ho anche provato questo modo mamny e non penso sia possibile ... Per curiosità, cosa c'è che non va nell'output standard? Ho trovato che è molto utile per il debug dei problemi di build e può essere facilmente cancellato con una chiamata 'cls' –

+0

@NickNieslanik L'output standard per la soluzione è ampio e il buffer del prompt dei comandi non è (senza modifiche) abbastanza grande da consentire rivedi l'output completo della console, più un sacco dell'output come il file copiato, il file cancellato non mi interessa in –

+3

Perché non usi File Logger per risolvere il problema del buffer del prompt dei comandi? questo allevierebbe almeno uno dei problemi. È possibile utilizzare il registratore di file per fare cose come "errori di registro in un file, avvisi a un altro e informazioni regolari a un terzo" –

risposta

3

È possibile scrivere un logger personalizzato come spiegato qui: http://msdn.microsoft.com/en-us/library/ms171471.aspx

Ecco un po 'di codice per iniziare:

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

Questo logger registra avvisi, gli errori e Riepiloga la quantità di errori e avvisi. Dovrai aggiungere un po 'di codice per tempo e progetti, in modo che sia esattamente quello che desideri.

Per usarlo, si chiamano MSBuild con le seguenti params aggiunti ad esso:

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

un pensiero sarebbe quello di estrarre informazioni richieste da un file di log.

Ti piace questa,

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 

Esempio:

@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 

Spero che questo aiuti!

Problemi correlati