Nous avons un problème similaire car nous avons 109 projets distincts à gérer. Pour répondre aux questions initiales sur la base de nos expériences :
1. Comment gérer au mieux les références entre les projets ?
Nous utilisons l'option "ajouter une référence" du menu contextuel. Si l'option "projet" est sélectionnée, la dépendance est ajoutée par défaut à notre fichier de solution unique et global.
2. La fonction "copie locale" doit-elle être activée ou désactivée ?
Notre expérience nous a appris qu'il n'y a pas de problème. La copie supplémentaire ne fait qu'allonger les délais de construction.
3. Chaque projet doit-il être compilé dans son propre dossier ou doivent-ils tous être compilés dans le même dossier de sortie (ils font tous partie de la même application) ?
Tous nos résultats sont placés dans un dossier unique appelé "bin". L'idée est que ce dossier soit le même que lorsque le logiciel est déployé. Cela permet d'éviter les problèmes qui surviennent lorsque la configuration du développeur est différente de celle du déploiement.
4. Les dossiers de solutions sont-ils un bon moyen d'organiser les choses ?
Non, d'après notre expérience. La structure des dossiers d'une personne est le cauchemar d'une autre. Les dossiers profondément imbriqués ne font qu'augmenter le temps nécessaire pour trouver quoi que ce soit. Nous avons une structure complètement plate, mais nous 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 fichier de solution unique. La construction de ce fichier prend beaucoup de temps, même si les projets eux-mêmes n'ont pas changé. Pour y remédier, nous créons généralement un autre fichier de solution "ensemble de travail actuel". Tous les projets sur lesquels nous travaillons y sont ajoutés. Les temps de construction sont considérablement améliorés, bien qu'un problème que nous avons constaté est qu'Intellisense échoue pour les types définis dans les projets qui ne font pas partie de l'ensemble actuel.
Un exemple partiel de la présentation de notre 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]