Abbiamo un problema simile poiché abbiamo 109 progetti separati da affrontare. Per rispondere alle domande originali basate sulle nostre esperienze:
1. Come gestire al meglio i riferimenti tra i progetti
Usiamo l'opzione del menu contestuale "aggiungi riferimento". Se è selezionato "progetto", la dipendenza viene aggiunta al nostro singolo file di soluzione globale per impostazione predefinita.
2. "Copia locale" dovrebbe essere attivato o disattivato?
Fuori dalla nostra esperienza. La copia extra si aggiunge ai tempi di costruzione.
3. Ogni progetto dovrebbe essere compilato nella propria cartella o tutti dovrebbero essere compilati nella stessa cartella di output (fanno tutti parte della stessa applicazione)
Tutto il nostro output viene messo in una singola cartella chiamata "bin". L'idea è che questa cartella sia la stessa di quando viene distribuito il software. Questo aiuta a prevenire problemi che si verificano quando la configurazione dello sviluppatore è diversa dalla configurazione della distribuzione.
4. Le cartelle delle soluzioni sono un buon modo per organizzare le cose?
No nella nostra esperienza. La struttura delle cartelle di una persona è l'incubo di un'altra. Le cartelle nidificate in profondità aumentano solo il tempo necessario per trovare qualsiasi cosa. Abbiamo una struttura completamente piatta ma denominiamo i nostri file di progetto, assembly e spazi dei nomi allo stesso modo.
Il nostro modo di strutturare i progetti si basa su un unico file di soluzione. Costruire questo richiede molto tempo, anche se i progetti stessi non sono cambiati. Per aiutare con questo, di solito creiamo un altro file di soluzione "set di lavoro corrente". Tutti i progetti su cui stiamo lavorando vengono aggiunti a questo. I tempi di compilazione sono notevolmente migliorati, anche se un problema che abbiamo riscontrato è che Intellisense non riesce per i tipi definiti nei progetti che non sono nel set corrente.
Un esempio parziale del layout della nostra soluzione:
\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]