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!
fonte
2009-11-05 16:30:55
Grazie, buon consiglio. –
piuttosto prolisso? Questo è un eufemismo, ho ottenuto 45k righe di output dalla mia build con quella bandiera! Buona risposta. –