Mamy podobny problem, ponieważ mamy do rozwiązania 109 oddzielnych projektów. Aby odpowiedzieć na oryginalne pytania oparte na naszych doświadczeniach:
1. Jak najlepiej radzić sobie z odniesieniami między projektami
Używamy opcji menu kontekstowego „dodaj odniesienie”. W przypadku wybrania opcji „projekt” zależność zostanie dodana do naszego pojedynczego, globalnego pliku rozwiązania.
2. Czy „kopiuj lokalnie” powinno być włączone czy wyłączone?
Z naszego doświadczenia. Dodatkowe kopiowanie po prostu wydłuża czas kompilacji.
3. Czy każdy projekt powinien być kompilowany do własnego folderu, czy też wszystkie powinny budować do tego samego folderu wyjściowego (wszystkie są częścią tej samej aplikacji)
Wszystkie nasze wyniki są umieszczane w jednym folderze o nazwie „bin”. Chodzi o to, że ten folder jest taki sam, jak podczas wdrażania oprogramowania. Pomaga to uniknąć problemów, które występują, gdy konfiguracja dewelopera różni się od konfiguracji wdrożenia.
4. Czy foldery rozwiązań to dobry sposób na porządkowanie rzeczy?
Nie z naszego doświadczenia. Struktura folderów jednej osoby jest koszmarem innej osoby. Głęboko zagnieżdżone foldery tylko wydłużają czas potrzebny na znalezienie czegokolwiek. Mamy całkowicie płaską strukturę, ale tak samo nazywamy nasze pliki projektu, zestawy i przestrzenie nazw.
Nasz sposób tworzenia struktury projektów opiera się na jednym pliku rozwiązania. Budowa tego zajmuje dużo czasu, nawet jeśli same projekty się nie zmieniły. Aby w tym pomóc, zwykle tworzymy kolejny plik rozwiązania „aktualnego zestawu roboczego”. Wszelkie projekty, nad którymi pracujemy, są do tego dodawane. Czasy kompilacji uległy znacznej poprawie, chociaż jednym z problemów, które widzieliśmy, jest to, że Intellisense nie działa w przypadku typów zdefiniowanych w projektach, które nie znajdują się w bieżącym zestawie.
Częściowy przykład układu naszego rozwiązania:
\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]