Ich beschäftige mich mit der Pflege eines ziemlich großen Portfolios von .NET-Anwendungen. Ebenfalls im Portfolio sind Legacy-Anwendungen, die auf anderen Plattformen basieren - natives C ++, ECLIPS Forms usw.
Ich habe gerade ein komplexes Build-Framework auf NAnt, das die Builds für alle diese Anwendungen verwaltet. Das Build-Framework verwendet NAnt, um verschiedene Dinge zu tun:
- Ziehen Sie Code aus Subversion heraus und erstellen Sie Tags in Subversion
- Erstellen Sie den Code mit MSBuild für .NET oder anderen Compilern für andere Plattformen
- Schauen Sie in AssemblyInfo-Dateien, um die Versionsnummern zu erhöhen
- Löschen Sie bestimmte Dateien, die nicht in Builds / Releases enthalten sein sollten
- Gibt Code in Bereitstellungsordnern frei
- Postleitzahl für Sicherungszwecke
- Bereitstellen von Windows-Diensten; starte und stoppe sie
- Usw.
Die meisten dieser Dinge können nur mit NAnt selbst erledigt werden, aber wir haben einige Erweiterungsaufgaben für NAnt erstellt, um einige Dinge zu erledigen, die für unsere Umgebung spezifisch sind. Außerdem werden die meisten der oben genannten Prozesse generiert und in vielen unserer verschiedenen Anwendungserstellungsskripts wiederverwendet, sodass wir die Logik nicht wiederholen. Es ist also kein einfacher NAnt-Code und keine einfachen Build-Skripte. Es gibt Dutzende von NAnt-Dateien, die zusammenkommen, um einen Build auszuführen.
In letzter Zeit war ich aus mehreren Gründen mit NAnt unzufrieden: (1) Die Syntax ist einfach schrecklich - Programmiersprachen über XML sind wirklich schrecklich zu pflegen. (2) Das Projekt scheint am Rebstock gestorben zu sein. In letzter Zeit gab es nicht viele Updates und es scheint, dass niemand wirklich am Ruder ist. Der Versuch, es mit .NET 4 zum Laufen zu bringen, hat aufgrund dieser mangelnden Aktivität einige Probleme verursacht.
Nach all dem Hintergrund ist hier meine Frage. Angesichts einiger Dinge, die ich basierend auf der obigen Liste erreichen möchte, und angesichts der Tatsache, dass ich mich hauptsächlich in einem .NET-Shop befinde, aber auch Nicht-.NET-Projekte erstellen muss, gibt es eine Alternative zu NAnt, die ich in Betracht ziehen sollte wechseln zu?
Zu den Dingen auf meinem Radar gehören Powershell (mit oder ohne Psake ), MSBuild für sich und Rake . Diese haben alle Vor- und Nachteile. Ist MSBuild beispielsweise leistungsfähig genug? Ich erinnere mich, dass ich es vor Jahren benutzt habe und es schien nicht so viel Kraft zu haben wie NAnt. Möchte ich wirklich, dass mein Team Ruby lernt, nur um Builds mit Rake zu erstellen? Ist psake wirklich ausgereift genug für ein Projekt, an das ich mein Portfolio binden kann? Ist Powershell "zu nah am Metall" und ich muss am Ende meine eigene Build-Bibliothek schreiben, die psake ähnelt, um sie alleine zu verwenden?
Gibt es andere Tools, die ich berücksichtigen sollte? Welches Build-Tool würden Sie in Betracht ziehen, wenn Sie an der Pflege eines .NET-Portfolios mit erheblicher Komplexität beteiligt wären? Was verwendet Ihr Team derzeit?