Wir haben ein ähnliches Problem wie 109 separate Projekte. Um die ursprünglichen Fragen zu beantworten, die auf unseren Erfahrungen basieren:
1. Wie gehen Sie am besten mit Referenzen zwischen Projekten um?
Wir verwenden die Kontextmenüoption 'Referenz hinzufügen'. Wenn 'Projekt' ausgewählt ist, wird die Abhängigkeit standardmäßig zu unserer einzelnen globalen Lösungsdatei hinzugefügt.
2. Sollte "copy local" ein- oder ausgeschaltet sein?
Aus unserer Erfahrung. Das zusätzliche Kopieren verlängert nur die Erstellungszeiten.
3. Sollte jedes Projekt in einem eigenen Ordner erstellt werden oder sollten alle in demselben Ausgabeordner erstellt werden (sie sind alle Teil derselben Anwendung)?
Alle unsere Ausgaben werden in einem einzigen Ordner namens 'bin' abgelegt. Die Idee ist, dass dieser Ordner derselbe ist wie bei der Bereitstellung der Software. Dies hilft, Probleme zu vermeiden, die auftreten, wenn sich das Entwickler-Setup vom Bereitstellungs-Setup unterscheidet.
4. Sind Lösungsordner eine gute Möglichkeit, Dinge zu organisieren?
Nein nach unserer Erfahrung. Die Ordnerstruktur einer Person ist der Albtraum einer anderen Person. Tief verschachtelte Ordner verlängern nur die Zeit, die benötigt wird, um etwas zu finden. Wir haben eine völlig flache Struktur, aber benennen unsere Projektdateien, Assemblys und Namespaces gleich.
Unsere Art, Projekte zu strukturieren, basiert auf einer einzigen Lösungsdatei. Der Aufbau dauert lange, auch wenn sich die Projekte selbst nicht geändert haben. Um dies zu unterstützen, erstellen wir normalerweise eine andere Lösungsdatei für den aktuellen Arbeitssatz. Alle Projekte, an denen wir arbeiten, werden hinzugefügt. Die Erstellungszeiten werden erheblich verbessert, obwohl ein Problem darin besteht, dass Intellisense für Typen fehlschlägt, die in Projekten definiert sind, die nicht im aktuellen Satz enthalten sind.
Ein Teilbeispiel unseres Lösungslayouts:
\bin
OurStuff.SLN
OurStuff.App.Administrator
OurStuff.App.Common
OurStuff.App.Installer.Database
OurStuff.App.MediaPlayer
OurStuff.App.Operator
OurStuff.App.Service.Gateway
OurStuff.App.Service.CollectionStation
OurStuff.App.ServiceLocalLauncher
OurStuff.App.StackTester
OurStuff.Auditing
OurStuff.Data
OurStuff.Database
OurStuff.Database.Constants
OurStuff.Database.ObjectModel
OurStuff.Device
OurStuff.Device.Messaging
OurStuff.Diagnostics
...
[etc]