Mehrere Anwendungen in einer einzigen Visual Studio-Lösung [geschlossen]

17

Ich arbeite für ein Unternehmen, das alle .NET-Anwendungen (Webanwendungen, Windows-Anwendungen und Konsolenanwendungen) in einer einzigen Visual Studio-Lösung zusammenfassen möchte.

Ich suche Erfahrung von Entwicklern, die entweder ihre eigenen Anwendungen so strukturieren oder in einem Unternehmen arbeiten, das dies tut. Ist das eine gute Idee?

  • Was sind die Vor- und Nachteile, wenn Sie alle Ihre Anwendungen in einer einzigen Lösung zusammenfassen möchten, anstatt für jede Anwendung separate Lösungen zu haben?

  • Wie schnell ist Visual Studio mit einer Lösung von mehr als 20 Projekten?

  • Und wie stabil ist die Lösungsdatei bei quellgesteuerter gleichzeitiger Entwicklung?

BruceHill
quelle
Beachten Sie, dass die Antworten möglicherweise für bestimmte Versionen von Visual Studio spezifisch sind.
Stakx

Antworten:

21

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:

  1. 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.

  2. 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.

  3. 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.

Arseni Mourzenko
quelle
2
Nur ein paar Punkte zu Ihrer Information: Sie können Projekte auch über die .csproj-Datei in VS öffnen, wenn Geschwindigkeit / Leistung ein Problem darstellen. Ein NuGet "privater Server" ist nur ein Netzwerkordner (und fügt diesen Ordner als Paketquellspeicherort in VS hinzu) - legen Sie einfach die nupkg-Dateien dort ab und es funktioniert.
Steven Evers
Vielen Dank, MainMa, dass Sie Ihre Erfahrungen mit einem einzigen Lösungssetup geteilt haben. eine sehr ausführliche und hilfreiche Antwort. Ich habe den Vorbehalt, dass alle Anwendungen in einer Lösung zusammengefasst sind, und dass ein Junior-Entwickler auf alles zugreifen muss. Wir verwenden Ankhsvn, und ich würde einem Nachwuchsentwickler lieber die URL für eine einzelne Anwendung geben, an der er arbeiten soll, als ihm Zugriff auf alles zu gewähren. Irgendwelche Gedanken dazu?
BruceHill
@BruceHill: Mit SVN können Sie genau konfigurieren, wer Zugriff auf was hat. Der Junior-Entwickler kann weiterhin jedes Stammverzeichnis anzeigen (siehe meine Frage zum Serverfehler ), kann jedoch nicht auf eingeschränkte Projekte zugreifen.
Arseni Mourzenko
2
Ich arbeite für ein paar große Unternehmen mit großen Entwicklerteams, die täglich Code schreiben, und kann Ihnen sagen, dass der Ansatz mit einer einzigen Lösung nicht funktioniert. Jedes Projekt ist Overhead. Laden, Bauen und Gott weiß, welche Schritte vor / nach dem Bauen jemand an die Projekte angehängt hat. Mit einem großen Entwicklerteam werden Sie nun täglich Änderungen an vielen dieser Projekte vornehmen. Fügen Sie bei jedem Check-in laufende Komponententests usw. für eine kontinuierliche Integration hinzu, und Sie haben dann noch mehr Aufwand. Haben Sie eine einzige Lösung pro implementierbarer Einheit (Service, Website) und verwenden Sie einen Paketmanager wie NuGet.
Immer lernen
8

Dies ist die beabsichtigte Verwendung.

Was sind die Vor- und Nachteile, wenn Sie alle Ihre Anwendungen in einer einzigen Lösung zusammenfassen möchten, anstatt für jede Anwendung separate Lösungen zu haben?

  • Profis:
    • einfachere Verweise zwischen Projekten
    • Einfacheres Debuggen / Durchstarten
    • Einfacheres Anhängen an Prozesse (dh Sie springen durch einen Windows-Dienst, wenn er zum gemeinsam genutzten Bibliothekscode springt, und es funktioniert nur, weil alle Symbole bereits geladen und berücksichtigt sind)
    • Die Codesuche im ide funktioniert besser (Sie müssen nicht unbedingt wissen, in welchem ​​Projekt sich der gesuchte Code befindet)
    • Projektübergreifende Änderungslisten sind einfacher zu verwalten (dh Sie haben den Bibliothekscode geändert, sodass Sie den Client-Code gleichzeitig mit einem Check-in aktualisieren müssen).
  • Nachteile:
    • Build-Geschwindigkeit: Wenn Sie die Gewohnheit haben, "alle neu zu erstellen", dauern Builds länger. Viel länger und inkrementelle Builds haben manchmal ein irres Verhalten.
    • ide speed: siehe weiter

Wie schnell ist Visual Studio mit einer Lösung von mehr als 20 Projekten?

Bei über 20 Projekten ... ist das vielleicht gar nicht so schlecht. Ich habe mehr gesehen, ohne VS Probleme zu haben. Es ist ziemlich stabil / schnell. JEDOCH ... wenn es ein Problem ist, kann es gemildert werden: öffne die .csproj in VS und arbeite von dort aus. Sie haben nicht die Vorteile, dass Sie alles in einer Lösung haben, aber Sie können die SLN immer wieder öffnen, wenn Sie müssen, und bei Bedarf nur in der .csproj-Datei arbeiten (wie jetzt).

Und wie stabil ist die Lösungsdatei bei quellgesteuerter gleichzeitiger Entwicklung?

Die Lösungsdatei wird nur geändert, wenn Sie Projekte oder Objekte auf Lösungsebene hinzufügen / entfernen. Sie wird daher nur selten geändert. Es ist XML, so dass Sie sehen können, was darin enthalten ist. Sie ändern sich selten.

Steven Evers
quelle
Steve, du hast gesagt "Dies ist die beabsichtigte Verwendung." Können Sie hierfür eine Referenz angeben? Vielen Dank!
Reformiert am