Kürzlich haben wir fast den gesamten Quellcode in meinem Unternehmen in eine einzige Lösung migriert.
Warum?
Ursprünglich hatten wir Dutzende von Lösungen. Einige Projekte aus einer Lösung haben Projekte aus einem anderen Projekt wiederverwendet, und es hat niemanden interessiert, einen Paketmanager zu verwenden. An dem Tag, an dem Sie ein Projekt, das fast überall verwendet wird, grundlegend ändern, erwarten Sie für die nächsten Tage oder Wochen Stunden und Stunden an verlorener Arbeit für das gesamte Unternehmen. Das Schlimmste ist, dass Sie nicht einmal wissen können, was genau von der Änderung betroffen wäre.
Das Zusammenführen des gesamten Codes zu einer Lösung war eine Alternative. Im Moment funktioniert es gut, und die Abhängigkeiten sind jetzt leicht zu verfolgen. Möchten Sie eine Methode ändern, aber auch die Auswirkungen nachverfolgen, die diese Änderung an einer beliebigen Stelle in der Codebasis haben kann? Visual Studio kann dies problemlos durchführen. Für mich ist es ein Erfolg.
Auch die kontinuierliche Integration ist jetzt einfacher. Eine Lösung zum Kompilieren und Bereitstellen. Fast nichts zu konfigurieren.
Ist es skalierbar?
In Bezug auf die Leistung war ich von Visual Studio sehr überrascht . Ich dachte, dass es mit einer Lösung mit zum Beispiel 50 Projekten anfangen wird zu weinen. Heute gibt es mehr als 200 Projekte; Visual Studio schien skalierbar genug zu sein, um sie so zu verwalten, als gäbe es nur 20 davon. Ja, es gibt Dinge, die Zeit brauchen. Wenn Sie jedes Projekt mit standardmäßig aktivierten Codeverträgen, aktivierter Codeanalyse usw. neu kompilieren, wird dies voraussichtlich eine Weile dauern. Aber niemand würde damit rechnen, 200 Projekte so schnell wie 10 zu kompilieren, und das sollten Sie übrigens nicht: Dies ist die Rolle des Continuous Integration Servers. Die Startzeit (Kaltstart, dann Laden der Lösung) ist beeindruckend schnell . vielleicht nicht so schnell wie bei 10 Projekten, aber immer noch sehr akzeptabel (unter 20 Sekunden auf einer Maschine, die vor mehr als fünf Jahren gekauft wurde).
Um noch weiter zu gehen, ist das systematische Entladen von Projekten eine gute Idee (und sehr einfach, wenn Projekte in Verzeichnissen innerhalb der Lösung organisiert sind). Wenn jemand an etwas arbeitet, für das nur drei Projekte geladen werden müssen, müssen nicht alle 200 Projekte geladen werden (es sei denn, Abhängigkeiten sind möglicherweise betroffen).
Die Versionskontrolle funktioniert ebenfalls wie erwartet (ich verwende einen SVN-Server, wenn es darauf ankommt). Ich habe nicht in einer realen Umgebung gearbeitet, in der beispielsweise Dutzende von Entwicklern häufig Code schreiben, aber ich würde mir vorstellen, dass dies nicht zu viele Probleme mit sich bringt. Beachten Sie nur die Fälle, in denen viele Entwickler gleichzeitig neue Projekte hinzufügen: Das Zusammenführen der SLN-Datei ist nicht die einfachste Aufgabe.
Fazit
Wenn ich die Entscheidung noch einmal treffen müsste:
Ich würde immer noch alles in eine einzige Lösung migrieren. Dies reduziert den Schmerz gebrochener Abhängigkeiten enorm, und dieser Vorteil allein ist es absolut wert. Ein zentraler Ort für den gesamten Code ist ebenfalls eine gute Idee. Dies ermöglicht es beispielsweise, in Visual Studio nach etwas zu suchen. Ich kann auch an zwei schwach verwandten Projekten arbeiten und habe immer noch nur ein Visual Studio-Fenster geöffnet.
Ich würde auch etwas mehr über NuGet und die Fähigkeit lernen, einen privaten NuGet-Server zu hosten. Das Verwalten der Abhängigkeiten über NuGet kann einige Probleme lösen, wenn Sie nicht mehrere Projekte in der gemeinsamen Lösung zusammenführen möchten. Persönlich hatte ich solche Fälle nicht, aber ich stelle mir vor, dass es andere Unternehmen geben könnten.
Schließlich kann die Investition in eine SSD für jeden Entwickler einen großen Unterschied machen. In meinem Fall ist die Codebasis immer noch auf einer normalen Festplatte gespeichert.