У нас є подібна проблема, оскільки ми маємо вирішити 109 окремих проектів. Щоб відповісти на оригінальні запитання, спираючись на наш досвід:
1. Як ви найкраще обробляєте посилання між проектами
Ми використовуємо опцію контекстного меню "додати посилання". Якщо вибрано "проект", то залежність додається до нашого єдиного, глобального файлу рішення за замовчуванням.
2. Чи слід увімкнути чи вимкнути функцію "копіювати локально"?
З нашого досвіду вимкнено. Додаткове копіювання просто збільшує час побудови.
3. Чи повинен кожен проект будувати свою власну папку, або всі вони повинні будувати одну і ту ж вихідну папку (всі вони є частиною однієї програми)
Весь наш результат розміщується в одній папці, що називається 'bin'. Ідея полягає в тому, що ця папка така ж, як і при розгортанні програмного забезпечення. Це допомагає запобігти проблемам, які виникають, коли налаштування розробника відрізняються від налаштувань розгортання.
4. Чи є папки рішень хорошим способом упорядкування матеріалів?
Ні, за нашим досвідом. Структура папок однієї людини - це кошмар іншої людини. Глибоко вкладені папки просто збільшують час, необхідний для пошуку чогось. Ми маємо абсолютно рівну структуру, але називаємо наші файли проектів, збірки та простори імен однаково.
Наш спосіб структурування проектів спирається на один файл рішення. Побудова цього займає багато часу, навіть якщо самі проекти не змінилися. Щоб допомогти в цьому, ми зазвичай створюємо інший файл рішення "поточного робочого набору". Будь-які проекти, над якими ми працюємо, додаються до цього. Час побудови значно покращений, хоча одна з проблем, яку ми бачили, полягає в тому, що Intellisense не працює для типів, визначених у проектах, яких немає в поточному наборі.
Частковий приклад макета нашого рішення:
\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]