Ich verwende den /v:diagnostic
Befehlszeilenschalter. MSBuild spuckt einige ziemlich ausführliche Ausgaben aus. Sie können auch die ausführliche Ausgabe in eine Protokolldatei spucken Ihre anstelle der Konsole, mit der /fl[n]
Befehlszeilenoption, und verwenden Sie dann den /flp[n]
(filelogparameter) Schalter angeben, die Ausführlichkeit, zB /flp:Verbosity=diagnostic;LogFile=latest_diagnostic.log
Sie haben zu entwerfen Erstellen Sie Skripte von Anfang an, um die Fehlerbehebung zu vereinfachen. Dinge tun wie:
Machen Sie jedes Ziel so granular wie möglich, so dass Sie jedes Ziel einzeln aufrufen können. Dies hilft, den Debugging-Prozess viel schneller zu machen.
Stellen Sie sicher, dass Ihre Aufgaben von der Microsoft.Build.Utilities.Task
Klasse erben. Es stellt eine Log-Eigenschaft zur Verfügung, die viel zu viele Protokollierungsfunktionen aufweist. Ich irrt normalerweise auf der Seite der Vorsicht verwenden Sie die LogMessage(MessageImportance,string,params object[])
. Meine Debugmeldungen erhalten eine Nachrichtenwichtigkeit von MessageImportance.Low
, so dass sie nur angezeigt werden, wenn der Ausführlichkeitsmodus diagnostisch ist.
Verwenden Sie System.Diagnostics.Trace.WriteLine
für die Ausgabe von Meldungen, die für die Protokollierung zu niedrig sind. Ich benutze DebugView, um diese Nachrichten zu sehen.
Schließlich versuchen Sie nicht, wirklich komplizierte Dinge im MSBuild-Skript selbst zu tun. MSBuild zeichnet sich durch die Verwaltung von Abhängigkeiten, Dateilisten und laufenden Aufgaben aus. Alles, was komplizierter oder fortgeschrittener ist, sollte in benutzerdefinierte Aufgaben verschoben werden, die in Ihrer bevorzugten .NET-Sprache geschrieben sind. Dies hat den zusätzlichen Vorteil, die Dinge viel einfacher Debuggen zu machen. Wenn Sie Ihre Logik im Code haben, können Sie die Methode System.Diagnostics.Debugger.Launch()
verwenden, mit der Sie MSBuild an den Debugger in einer laufenden Instanz von Visual Studio anhängen können (hoffentlich einer, der Ihre benutzerdefinierte Aufgabe bereits geladen hat).
Viel Glück!
Danke, gute Ratschläge. –
ziemlich ausführlich? Das ist eine Untertreibung, ich habe 45k Zeilen Ausgabe von meinem Build mit dieser Flagge! Gute Antwort. –