2009-11-05 5 views
9

Usiamo MSBuild in modo estensivo come parte del nostro processo di integrazione continua, e nonostante sia incredibilmente potente e possiamo praticamente fare tutta la nostra build, test e distribuzione al suo interno (utilizzando alcune attività personalizzate) - abbiamo scoperto che il debugging usare i tag è un problema e non sempre ci può fornire abbastanza informazioni.Come posso eseguire il debug (preferibilmente in un IDE) uno script MSBuild?

Ho trovato: http://www.wintellect.com/CS/blogs/jrobbins/archive/2007/12/03/msbuild-debuggers.aspx, ma sfortunatamente il progetto sembra essere scomparso da Codeplex.

Qualcuno ha qualche idea se c'è qualcosa di simile a questo disponibile o se c'è un altro modo/tecnica che può essere utilizzato?

Grazie.

risposta

12

Uso lo switch da riga di comando /v:diagnostic. MSBuild emette un output piuttosto dettagliato. Si può anche sputare l'output dettagliato in un file di log, invece della console, utilizzando l'opzione della riga /fl[n] di comando, e quindi utilizzare l'interruttore /flp[n] (filelogparameter) per specificare il livello di dettaglio, ad esempio, /flp:Verbosity=diagnostic;LogFile=latest_diagnostic.log

Bisogna progettare la vostra creare script dall'inizio per semplificare la risoluzione dei problemi. Fai cose come:

Rendi ogni obiettivo il più dettagliato possibile, in modo da poter chiamare ogni target individualmente. Questo aiuta a rendere il processo di debug molto più veloce.

Assicurarsi che le attività vengano ereditate dalla classe Microsoft.Build.Utilities.Task. Espone una proprietà Log che ha troppe funzioni di registrazione. Generalmente errare sul lato della cautela usare lo LogMessage(MessageImportance,string,params object[]). I miei messaggi di debug hanno un'importanza del messaggio pari a MessageImportance.Low in modo che vengano visualizzati solo quando la modalità verbosità è diagnostica.

Utilizzare System.Diagnostics.Trace.WriteLine per l'emissione di messaggi di livello troppo basso per la registrazione. Io uso DebugView per guardare quei messaggi.

Infine, cerca di non fare cose davvero complicate nello script MSBuild stesso. MSBuild eccelle nella gestione delle dipendenze, degli elenchi di file e delle attività in esecuzione. Qualunque cosa più complicata o avanzata dovrebbe essere spostata su attività personalizzate scritte nel linguaggio .NET scelto. Questo ha l'ulteriore vantaggio di rendere le cose molto più facili da eseguire per il debug di. Quando hai la logica del codice, puoi usare il metodo System.Diagnostics.Debugger.Launch(), che ti permetterà di allegare MSBuild al debugger in un'istanza in esecuzione di Visual Studio (si spera che abbia già caricato l'attività personalizzata).

Buona fortuna!

+0

Grazie, buon consiglio. –

+0

piuttosto prolisso? Questo è un eufemismo, ho ottenuto 45k righe di output dalla mia build con quella bandiera! Buona risposta. –

1

Puoi anche dare un'occhiata all'eccellente app commerciale (con prova di 14 giorni) MSBuild Sidekick at Attrice Corp per eseguire il debug del tuo script MSBuild.