Mir ist bekannt, dass es andere NAnt und MSBuild gibt Fragen zu zu Stack Overflow gibt, aber ich konnte keinen direkten Vergleich zwischen den beiden hier die Frage.
Wann sollte man NAnt gegenüber MSBuild wählen? Welches ist besser für was? Ist NAnt besser für Home / Open Source-Projekte und MSBuild für Arbeitsprojekte geeignet? Wie ist die Erfahrung mit einem der beiden?
.net
msbuild
automation
nant
Yordan Pavlov
quelle
quelle
Eine der Hauptattraktionen von MSBuild für mich (auf Windows-Plattformen) ist, dass es Teil von .NET selbst ist. Das bedeutet, dass auf jedem Windows-Computer, der mit Windows Update auf dem neuesten Stand ist, MSBuild verfügbar ist. Hinzu kommt, dass der C # -Compiler auch Teil von .NET selbst ist und Sie über eine Plattform verfügen, die Projekte auf sauberen Computern erstellen kann. Visual Studio Behemoth muss nicht installiert werden. NAnt muss dagegen explizit installiert werden, bevor ein Build ausgelöst werden kann.
Nur zur Veranschaulichung: Ich habe in der Vergangenheit NMake, Make, Ant, Rake, NAnt und MSBuild für nicht triviale Builds verwendet (in dieser Reihenfolge). Mein Favorit ist zweifellos MSBuild (und ich bevorzuge es nicht, weil "das ist, was Visual Studio verwendet"). IMHO ist es ein sehr unterschätztes Build-Tool.
Ich würde NAnt vs. MSBuild mit dem Unterschied zwischen prozeduraler und funktionaler Programmierung vergleichen. NAnt ist ganz einfach und Sie bekommen, was Sie sehen. MSBuild hingegen erfordert etwas mehr Nachdenken. Die Lernkurve ist steiler. Aber sobald Sie es "verstanden" haben, können Sie einige erstaunliche Dinge damit machen.
Daher würde ich empfehlen, sich MSBuild anzuschauen, wenn Sie sich auch für funktionale oder logische Programmierung interessieren - wenn Sie bereit sind, ein wenig Zeit und Mühe zu investieren, bevor Sie greifbare Ergebnisse sehen (natürlich glaube ich auch fest daran, dass sich die Investition letztendlich auszahlt und Sie kann mächtigere Dinge effizienter machen).
quelle
Persönlich benutze ich beide - für das gleiche Projekt.
MSBuild eignet sich hervorragend zum Erstellen von Visual Studio-Lösungen und -Projekten - dafür ist es gemacht.
NAnt ist meiner Meinung nach leichter von Hand zu bearbeiten - besonders wenn Sie Ant bereits kennen. NAnt kann MSBuild sehr einfach mit NAntContrib aufrufen. Also erstelle ich ein NAnt-Skript von Hand, um beispielsweise erstellte Dateien zu kopieren, zu bereinigen usw. - und rufe MSBuild auf, um den eigentlichen Teil "Verwandle meinen C # -Quellcode in Assemblys" auszuführen.
Wenn Sie ein Beispiel dafür möchten, schauen Sie sich meine Protokollpuffer-Build-Datei an . (Ich würde nicht behaupten, dass es ein fabelhaftes NAnt-Skript ist, aber es macht den Job.)
quelle
NAnt hat sofort mehr Funktionen, aber MSBuild verfügt über eine viel bessere Grundstruktur ( ), die das Erstellen wiederverwendbarer MSBuild-Skripte erheblich vereinfacht.
Es dauert eine Weile, bis MSBuild verstanden ist, aber wenn Sie es einmal getan haben, ist es sehr schön.
Lernmaterialien:
von Sayed Ibrahim Hashimi (Januar 2009)
by Y. Hashimi (Sep, 2008)
quelle
KISS = MSBuild verwenden.
Warum etwas anderes in die Mischung aufnehmen, wenn Sie etwas haben, das sofort einen vernünftigen Job macht? Als MSBuild ankam, starb NAnt. Und Mono wird eine MSBuild-Implementierung haben ( xbuild ).
DRY = MSBuild verwenden.
Fragen Sie sich, was Sie von einem Build-System erwarten? Ich möchte ein Build-System, das auch von meiner IDE verwendet wird, anstatt zwei verschiedene Konfigurationen beizubehalten.
Persönlich würde ich gerne einige echte Argumente für NAnt hören, weil ich mir einfach keine vorstellen kann, die wirklich Wasser halten.
quelle
Eine Sache, die mir auf mehreren Postern aufgefallen ist, war die manuelle Bearbeitung der .csproj- (oder .vbproj- usw.) Dateien.
MSBuild ermöglicht die Anpassung dieser. * Proj-Dateien mithilfe von .user-Dateien. Wenn ich ein Projekt mit dem Namen habe MyCreativelyNamedProject.csproj und will in der es die MSBuild Aufgaben anpassen, kann ich eine Datei mit dem Namen erstellen MyCreativelyNamedProject.csproj.user und die Verwendung CustomBeforeMicrosoftCommonTargets und CustomAfterMicrosoftCommonTargets , um diese Dateien anpassen.
Außerdem können sowohl NAnt als auch MSBuild durch benutzerdefinierte MSBuild-Aufgaben und durch NantContrib-Erweiterungen an den Inhalt des Herzens angepasst werden.
Die Verwendung von NAnt oder MSBuild hängt also wirklich von der Vertrautheit ab:
Es ist auch erwähnenswert, dass MSBuild so gut wie garantiert mit allen neuen Versionen von .NET und Visual Studio funktioniert, sobald sie veröffentlicht werden, während NAnt möglicherweise eine gewisse Verzögerung aufweist.
quelle
Ich verwende beides, indem meine NAnt- Skripte MSBuild aufrufen. Mein Hauptgrund für den Aufenthalt bei NAnt ist die Isolation . Lassen Sie mich erklären, warum ich das für wichtig halte:
Hinzufügen von Abhängigkeiten zu Ihrem Projekt. Die NAnt-Build-Datei ist Visual Studio fremd (in meinem Fall halte ich dies für einen Profi), sodass Visual Studio nicht versucht, etwas damit zu tun. MSBuild-Aufgaben sind eingebettet in die Lösung und können auf andere MSBuild-Aufgaben verweisen. Ich habe den Quellcode von jemand anderem erhalten, nur um herauszufinden, dass ich ihn nicht erstellen konnte, da die MSBuild-Community-Aufgaben nicht installiert wurden. Was ich besonders frustrierend finde, ist, dass Visual Studio einfach nicht erstellt und eine Reihe von Fehlern verursacht hat, die mir das Debuggen von Zeit verloren haben. Dies trotz der Tatsache, dass der angeforderte Build (beispielsweise als Debug-Build) ohne einige der Extras der MSBuild-Task hätte ausgeführt werden können. Kurz gesagt: Ich mag es nicht, meinem Projekt Abhängigkeiten hinzuzufügen, wenn ich es vermeiden kann .
Ich vertraue Visual Studio nicht so weit ich sein Entwicklungsteam werfen kann. Dies geht auf die frühen Tage von Visual Studio zurück, als es mein HTML massakrierte. Ich benutze den Designer zum Beispiel immer noch nicht (auf einer Konferenz habe ich kürzlich festgestellt, dass Kollegen dasselbe getan haben). Ich habe festgestellt, dass Visual Studio Abhängigkeiten und Versionsnummern in der DLL-Datei vermasseln kann (ich kann dies nicht replizieren, aber es ist in einem Projekt konsistent passiert und hat viel Kummer und Zeitverlust verursacht). Ich habe auf eine Erstellungsprozedur zurückgegriffen, die Visual Studio verwendet, um nur im Debug-Modus zu erstellen. Für die Produktion verwende ich NAnt, um alles extern zu steuern . Visual Studio kann einfach nicht mehr stören, wenn ich mit NAnt baue.
PS: Ich bin ein Webentwickler und mache keine Windows Forms-Entwicklung.
quelle
Obwohl ich mit MsBuild nicht sehr vertraut bin, habe ich den Eindruck, dass einige der wichtigsten Unterschiede auf beiden Seiten durch Ergänzungen ergänzt werden können:
Ich musste kürzlich ein Silverlight-Projekt in Nant bauen. Ich entdeckte, dass das Leben einfacher wäre, wenn ich dies nur mit MsBuild tun würde. Am Ende rief ich eine MsBuild-Aufgabe aus einem Nant-Skript heraus auf, daher ist es wohl nicht ungewöhnlich, die beiden zu mischen und zu kombinieren.
Darüber hinaus wird es wohl eine Frage der persönlichen Präferenz sein - natürlich können Sie einige / die meisten Funktionen von MsBuild in Visual Studio verwalten, wenn dies Ihr Ding ist. Nant scheint flexibler und besser geeignet zu sein, wenn Sie Skripte lieber von Hand schreiben möchten und wenn Sie aus der Java-Welt kommen, sind Sie wahrscheinlich genau richtig damit.
quelle
Am Ende habe ich beide benutzt. Bei der Neugestaltung unseres Build-Systems hatte ich ein heikles Problem. Ich konnte nämlich .vcproj (und die Familie) nicht loswerden, weil wir alle VS verwendeten, um die Projektdateien, Einstellungen und Konfigurationen zu aktualisieren. Ohne einen großen Prozess der Vervielfältigung und Fehleranfälligkeit könnten wir unser Build-System nicht auf einen neuen Satz von Dateien stützen.
Aus diesem Grund habe ich beschlossen, die 'proj'-Dateien von VS beizubehalten und MSBuild zu verwenden (es handelt sich um MSBuild-Dateien, mindestens VS2005 und VS2008 verwenden MSBuild-Projektdateien). Für alles andere (benutzerdefinierte Konfiguration, Komponententests, Verpackung, Vorbereitung der Dokumentation ...) habe ich NAnt verwendet.
Für die kontinuierliche Integration habe ich CruiseControl verwendet. Wir hatten also CC-Skripte, die NAnt-Jobs auslösten, die zum Erstellen von MSBuild verwendet wurden.
Ein letzter Hinweis: MSBuild unterstützt KEINE Setup-Projekte! Sie müssen also nicht mehr DevEnv.com aufrufen oder Visual Studio direkt verwenden. Das habe ich letztendlich getan, aber ich habe das Setup-Projekt standardmäßig in allen Lösungskonfigurationen deaktiviert, da Entwickler sie normalerweise nicht erstellen müssten. Wenn dies der Fall ist, können sie sie manuell auswählen, um sie zu erstellen.
quelle
Ich bin kürzlich von NAnt zu MSBuild gewechselt, weil es VS-Lösungen erstellen kann. Ich benutze NAnt aber immer noch gelegentlich.
Möglicherweise möchten Sie auch MSBuild-Community-Aufgaben ausprobieren, die NAntContrib ähneln.
quelle
Die für NAnt verfügbaren Dokumentationen und Tutorials erleichtern das Erlernen von Build-Skripten mit NAnt. Nachdem ich NAnt verstanden und Build-Skripte erstellt hatte, begann ich, dieses Wissen in MSBuild zu übersetzen (ich habe X in NAnt gemacht, wie mache ich X in MSBuild?). Die Dokumentation von Microsoft setzt normalerweise ein ziemlich hohes Maß an Wissen voraus, bevor es nützlich ist.
Der Grund für den Wechsel von NAnt zu MSBuild ist, dass MSBuild aktueller ist. Leider war die letzte Veröffentlichung von NAnt am 8. Dezember 2007, während MSBuild 4.0 (.NET 4.0) nicht mehr weit ist. Es sieht so aus, als wäre das NAnt-Projekt gestorben.
Wenn Sie eine gute Dokumentation für jemanden finden, der gerade erst anfängt, das Erstellen von Build-Skripten mit MSBuild zu lernen, überspringen Sie NAnt und gehen Sie direkt zu MSBuild. Wenn NAnt jemals eine neue Version herausbringt, würde ich in Betracht ziehen, bei NAnt zu bleiben, aber sie bleiben jetzt zurück.
quelle
Wir benutzen beide. NAnt ist für alle "Scripting" -Dinge verantwortlich, wie das Kopieren und Bereitstellen auf IIS , Erstellen von Paketen, und MSBuild ist für das Erstellen der Lösung verantwortlich. Dann können wir Probleme mit nicht unterstütztem .NET 4.0 durch eine neue Version von NAnt vermeiden.
NAnt ist auch skalierbarer. Wenn wir die Bereitstellungsskripte auf Produktionsserver migrieren möchten, kopieren wir nur die Build-Datei und installieren eine ordnungsgemäße Version von .NET - keine Visual Studio-Probleme mit csproj-Dateien :)
quelle
YDeliver von Manoj ist ein Build-Framework, das auf PSake basiert. Es verfügt über eine Vielzahl von Bibliotheksfunktionen und die Möglichkeit, Workflows zu definieren. Wir haben damit über sechs Unternehmensprojekte für die Produktion bereitgestellt.
Verwenden Sie es in Verbindung mit TeamCity , CruiseControl oder allem, was PowerShell ausführen kann .
quelle
Wir verwenden FlubuCore. Es ist eine Open-Source-C # -Bibliothek zum Erstellen von Projekten und Ausführen von Bereitstellungsskripten mit C # -Code.
Einfaches Beispiel für die Verwendung von Flubu:
Weitere Informationen zu flubu und den ersten Schritten finden Sie hier: Auswahl-für-Build-Tool-msbuild-nant-oder-etwas-anderes
quelle