Nous avons un problème similaire car nous avons 109 projets distincts à traiter. Pour répondre aux questions originales en fonction de nos expériences:
1. Comment gérer au mieux les références entre les projets
Nous utilisons l'option de menu contextuel «ajouter une référence». Si «projet» est sélectionné, la dépendance est ajoutée par défaut à notre fichier de solution global unique.
2. La "copie locale" doit-elle être activée ou désactivée?
Off dans notre expérience. La copie supplémentaire ne fait qu'ajouter aux temps de construction.
3. Chaque projet doit-il être généré dans son propre dossier ou doit-il tous être généré dans le même dossier de sortie (ils font tous partie de la même application)
Toutes nos sorties sont placées dans un seul dossier appelé «bin». L'idée étant que ce dossier est le même que lorsque le logiciel est déployé. Cela permet d'éviter les problèmes qui se produisent lorsque la configuration du développeur est différente de la configuration du déploiement.
4. Les dossiers de solutions sont-ils un bon moyen d'organiser les choses?
Non dans notre expérience. La structure des dossiers d'une personne est le cauchemar d'une autre. Les dossiers profondément imbriqués augmentent simplement le temps nécessaire pour trouver quoi que ce soit. Nous avons une structure complètement plate mais nommons nos fichiers de projet, nos assemblages et nos espaces de noms de la même manière.
Notre façon de structurer les projets repose sur un seul fichier solution. Construire cela prend beaucoup de temps, même si les projets eux-mêmes n'ont pas changé. Pour vous aider, nous créons généralement un autre fichier de solution «ensemble de travail actuel». Tous les projets sur lesquels nous travaillons sont ajoutés à cela. Les temps de construction sont considérablement améliorés, bien qu'un problème que nous ayons vu est qu'Intellisense échoue pour les types définis dans les projets qui ne sont pas dans l'ensemble actuel.
Un exemple partiel de notre disposition de solution:
\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]