Ich habe den Eindruck, dass in der .NET-Welt kein Maven-ähnliches Tool wirklich benötigt wird.
Ich bin mir bewusst, dass es Byldan und NMaven gibt (lebt es noch?), Aber ich habe noch kein reales Projekt gesehen, das sie verwendet.
Auch in den meisten .NET-Projekten, an denen ich gearbeitet habe, wurde nie die Notwendigkeit eines Maven-ähnlichen Tools geäußert. Die Probleme, mit denen sich Maven Maven befasst (automatische Abhängigkeitsauflösung, auf Konventionen basierende Build-Struktur ...), scheinen in .NET nicht so wichtig zu sein.
Ist meine Wahrnehmung richtig?
Warum ist das so?
Was verwenden die Leute wirklich in .NET? Keine automatische Abhängigkeitsauflösung?
Schreiben sie ihre eigenen Build-Tools?
Verwendet jemand Maven selbst, um seine .NET-Projekte zu verwalten? Ist das eine gute Wahl?
Was sind deine Erfahrungen?
Antworten:
Für die Auflösung von Artefaktabhängigkeiten würde ich sagen, dass Nuget jetzt die bevorzugte Alternative ist. Es unterstützt und fördert die Auflösung der Erstellungszeit, dh es müssen keine Artefakte für binäre Abhängigkeiten in vcs eingecheckt werden. Siehe diese Artikel .
Ab Version 2.7 von Nuget wird die Auflösung der Erstellungszeit noch besser unterstützt, wobei der Befehl Nuget-Wiederherstellung eine der Optionen ist.
Update: Es gibt jetzt einen alternativen, Nuget-kompatiblen Paketmanager - Paket , der besser als der Vanilla Nuget-Client darin ist, vorübergehende Abhängigkeiten zu behandeln und Abhängigkeiten zwischen Projekten in derselben Lösung zu harmonisieren. Das Tooling scheint ebenfalls ziemlich ausgereift zu sein (VS-Integration und Befehlszeilen-Tooling für CI)
quelle
Maven wird von Apache-Projekten angetrieben, die ein zentraler Bestandteil der riesigen Java-Open-Source-Infrastruktur sind. Die weit verbreitete Akzeptanz von Maven muss damit zusammenhängen, und der aktuelle Reifegrad (Qualität) ist ebenfalls sehr gut.
Ich glaube nicht, dass die .NET Open Source-Welt bedeutende Open Source-Akteure hat, die ein solches Konzept durchsetzen könnten. Irgendwie scheint .NET immer auf Redmond zu warten.
quelle
Obwohl die Frage hier alt ist, sind meine Gedanken. Maven ist nicht einfach ein Build-Tool. Es bietet viel mehr als Repository-Management, Projektmanagement, Abhängigkeitsmanagement, Build-Management und so weiter ...
Die Hauptattraktion ist meiner Meinung nach das Abhängigkeitsmanagement. Die JAR-Hölle ist von Anfang an ein großes Problem im Java-Land, und Sie benötigen einige Werkzeuge, um damit fertig zu werden. In der .Net-Welt gibt es kein solches Problem (tatsächlich wurde das Fehlen der DLL-Hölle in den ersten Tagen von .Net als Hauptattraktion beworben), so dass die meisten Leute mit MSBuild gut zurechtkommen. Später gab es aufgrund der Verfügbarkeit vieler Bibliotheken von Drittanbietern Verwaltungsprobleme. Um dieses Problem loszuwerden, haben sie jetzt Nuget.
Kurz gesagt, MsBuild + Nuget ist in der .Net-Welt für den größten Teil des Projekts gut genug, Maven ist für sie einfach übertrieben.
quelle
Ich stimme vielen Antworten hier zu. .NET hatte keine große Anzahl unabhängiger IDEs. Sie haben Visual Studio verwendet, um Ihren Code zu schreiben, Ihre Abhängigkeiten zu verwalten usw. Die Lösung in VS ist gut genug für MSBuild, sodass Sie diese von Ihren Build-Servern verwenden.
Java hingegen hat viele IDEs weiterentwickelt, und Java hat einen Weg eingeschlagen, Projekte außerhalb der IDE zu verwalten. Geben Sie dem Entwickler die Möglichkeit, die IDE seiner Wahl zu verwenden. Ich habe vor kurzem mit dem Cross-Training von C # nach Java begonnen und kann Ihnen sagen, dass das Maven-Build-Konzept ziemlich fremd ist, aber nach einer Weile liebe ich es, und was noch wichtiger ist, ich sehe, was mir das Repo-Konzept bietet.
Wie VS nun verwaltete Abhängigkeiten erfordert, müssen Sie entweder eine Projektreferenz oder eine Referenz zu einer DLL hinzufügen. Das Hinzufügen einer DLL-Referenz ist fehlerhaft. Wie verwalten Sie Versionsänderungen, wie strukturieren Sie DLLs von Drittanbietern aus externen und internen Quellen sowie DLLs, die Sie von Ihrem eigenen Team aufnehmen möchten, jedoch nicht als Projektreferenz. Ich habe viele Workarounds durchgeführt, die im Allgemeinen auf der dateibasierten Verzeichnisstruktur basieren, aber keine davon ist elegant oder großartig, wenn sich die Version ändert. Dies erschwert auch die Verzweigung, da dies eine Überlegung bei der Strukturierung der Verzeichnisse darstellt.
Jetzt habe ich mit Java und öffentlichen Mavan Repos gearbeitet, super cool. Ich habe mit Python gearbeitet und die Pip-Installation wieder effektiv von öffentlichen Repos durchgeführt. Schließlich habe ich mit VS 2015 wieder ein paar Sachen in C # gemacht und die Integration mit Nuget hat genau gefehlt.
Im Unternehmensumfeld sind öffentliche Repos nicht immer direkt zugänglich, sodass Sie Unternehmens-Repos benötigen. Auch hier sind Nicht-Microsoft-Ökosysteme voraus.
Zusammenfassend lässt sich sagen, dass Java aus einer Open-Source-Umgebung hervorgegangen ist, in der die IDE-Projektwartung nicht verwendet wurde, während .NET aus der Verwaltung des Projekts durch Visual Studio hervorgegangen ist. Aufgrund dieser unterschiedlichen Pfade werden Repos später in Visual Studio bereitgestellt.
Schließlich und dies ist meine Beobachtung, tendiert die Java-Community dazu, die Frameworks anderer Leute häufiger zu verwenden, da die Java-Basisbibliotheken weniger bieten. Während .NET-Leute viel mehr von ihrem eigenen Code schreiben. Die Java-Community verfügt über ein größeres Ökosystem an Mustern und Praktiken, während .NET erneut eigenen Code schrieb oder auf Microsoft wartete. Dies ändert sich, zeigt aber erneut, warum .NET bei der Anforderung von Repos hinter Java steht.
quelle
Wir verwenden NAnt, weil es keine echte Alternative gibt, die so ausgereift ist. Wir haben an mehreren Projekten gleichzeitig gearbeitet und uns darum gekümmert, mehrere Versionen von Bibliotheken zu haben und wie man damit umgeht. Das Maven-Angebot ist wirklich vielversprechend, aber nicht ausgereift genug, um auf der .NET-Plattform nützlich zu sein.
Ich denke, die Notwendigkeit ist weniger offensichtlich, da die meisten .NET-Projekte Visual Studio verwenden, das automatisch eine Verzeichnisstruktur, Abhängigkeiten usw. vorschlägt / erzwingt. Dies ist eine irreführende "Lösung", da abhängig von einer IDE für diese Art von Konventionen die Flexibilität des Entwicklungsteams eingeschränkt wird und Sie an eine bestimmte Lösung und einen bestimmten Anbieter gebunden sind. Dies ist in der Java-Welt offensichtlich nicht der Fall, daher ist eindeutig ein Maven-ähnliches Tool erforderlich.
quelle
Ich mag keine XML-basierten Build-Tools.
Wir haben Ruby Rake angepasst, um unsere .net-Produkte zu bauen. Albacore ist eine wirklich schöne Suite von Rake-Aufgaben zum Erstellen von .net-Projekten.
Mit Rake ist es wirklich einfach, selbst komplexe Build-Skripte zu erstellen, und Sie haben es mit Code statt mit Tonnen von spitzen Klammern zu tun.
quelle
Ich weiß, dass dies ein alter Beitrag ist, aber als ich darauf stieß, wollte ich eine andere großartige Alternative teilen.
Viele Leute nutzen Psake (ausgesprochen Sockey) nicht aus. Das wirklich Coole ist, dass es msbuild verwendet.
Dies ist zwar keine Antwort auf die Maven-Frage (Maven entstand aus der Notwendigkeit von Java-Builds, die auf den langwierigen ausführlichen ANT-Skripten basieren).
Die meisten Leute verwenden kein CI (Continuous Integration) wie Jenkins, Hudson, Cruise Control, TeamCity, TFS und auch kein Powershell.
Dieses PSake for Powershell, das msbuild nutzt, sorgt dafür, dass die Dinge aufgabenorientiert und sehr gut organisiert sind. Hier ist ein Linkbeispiel http://www.shilony.net/2013/06/15/build-automation-with-powershell-and-psake/
quelle
Wir verwenden UppercuT. UppercuT verwendet NAnt zum Erstellen und es ist das wahnsinnig einfach zu verwendende Build Framework.
Automatisierte Builds so einfach wie (1) Lösungsname, (2) Quellcodeverwaltungspfad, (3) Firmenname für die meisten Projekte!
https://github.com/chucknorris/uppercut/
Einige gute Erklärungen hier: UppercuT
Mehr Informationen
UppercuT ist ein herkömmlicher automatisierter Build, dh Sie richten eine Konfigurationsdatei ein und erhalten dann eine Reihe von Funktionen kostenlos. Die wohl leistungsstärkste Funktion ist die Möglichkeit, Umgebungseinstellungen an EINEM Ort anzugeben und überall anzuwenden, einschließlich der Dokumentation beim Erstellen der Quelle.
Dokumentation verfügbar: https://github.com/chucknorris/uppercut/wiki
Eigenschaften :
quelle