2009-11-05 11 views
9

Wir verwenden MSBuild ziemlich umfassend als Teil unseres kontinuierlichen Integrationsprozesses, und obwohl es unglaublich leistungsfähig ist und wir praktisch alle unsere Builds, Tests und Deployments darin durchführen können (mit einigen benutzerdefinierten Tasks) - wir haben festgestellt, dass es debuggt Die Verwendung von Tags ist ein Schmerz und kann uns nicht immer genug Informationen liefern.Wie kann ich (vorzugsweise in einer IDE) ein MSBuild-Skript debuggen?

Ich habe gefunden: http://www.wintellect.com/CS/blogs/jrobbins/archive/2007/12/03/msbuild-debuggers.aspx, aber leider scheint das Projekt von Codeplex verschwunden zu sein.

Hat jemand eine Idee, ob es etwas Ähnliches gibt oder ob es einen anderen Weg/Technik gibt, der benutzt werden kann?

Danke.

Antwort

12

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!

+0

Danke, gute Ratschläge. –

+0

ziemlich ausführlich? Das ist eine Untertreibung, ich habe 45k Zeilen Ausgabe von meinem Build mit dieser Flagge! Gute Antwort. –

1

Sie können sich auch die ausgezeichnete kommerzielle App (mit 14-tägiger Testversion) MSBuild Sidekick at Attrice Corp ansehen, um Ihr MSBuild-Skript zu debuggen.

Verwandte Themen