Tenemos un problema similar ya que tenemos 109 proyectos separados de los que tratar. Para responder a las preguntas originales basadas en nuestras experiencias:
1. ¿Cómo maneja mejor las referencias entre proyectos?
Usamos la opción de menú contextual 'agregar referencia'. Si se selecciona 'proyecto', entonces la dependencia se agrega a nuestro archivo de solución global único de forma predeterminada.
2. ¿Debería estar activado o desactivado "copia local"?
Fuera de nuestra experiencia. La copia adicional solo aumenta los tiempos de construcción.
3. ¿Cada proyecto debe compilarse en su propia carpeta o todos deben compilarse en la misma carpeta de salida (todos son parte de la misma aplicación)?
Toda nuestra salida se coloca en una sola carpeta llamada 'bin'. La idea es que esta carpeta sea la misma que cuando se implementa el software. Esto ayuda a prevenir problemas que ocurren cuando la configuración del desarrollador es diferente a la configuración de implementación.
4. ¿Son las carpetas de soluciones una buena forma de organizar las cosas?
No en nuestra experiencia. La estructura de carpetas de una persona es la pesadilla de otra. Las carpetas profundamente anidadas solo aumentan el tiempo que lleva encontrar cualquier cosa. Tenemos una estructura completamente plana, pero los nombres de nuestros archivos de proyecto, ensamblajes y espacios de nombres son los mismos.
Nuestra forma de estructurar proyectos se basa en un único archivo de solución. Construir esto lleva mucho tiempo, incluso si los proyectos en sí no han cambiado. Para ayudar con esto, normalmente creamos otro archivo de solución de 'conjunto de trabajo actual'. Cualquier proyecto en el que estemos trabajando se agrega a esto. Los tiempos de construcción mejoran enormemente, aunque un problema que hemos visto es que Intellisense falla para los tipos definidos en proyectos que no están en el conjunto actual.
Un ejemplo parcial del diseño de nuestra solución:
\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]