Çözmemiz gereken 109 ayrı projemiz olduğu için benzer bir sorunumuz var. Deneyimlerimize dayanarak orijinal soruları cevaplamak için:
1. Projeler arasındaki referansları en iyi nasıl ele alırsınız
'Referans ekle' bağlam menüsü seçeneğini kullanıyoruz. 'Proje' seçilirse, bağımlılık varsayılan olarak tek, global çözüm dosyamıza eklenir.
2. "Yerel kopyala" açık mı yoksa kapalı mı olmalı?
Deneyimlerimizde kapalı. Fazladan kopyalama sadece inşa sürelerine katkıda bulunur.
3. Her proje kendi klasöründe mi oluşturulmalı yoksa hepsi aynı çıktı klasörüne mi oluşturulmalı (hepsi aynı uygulamanın parçasıdır)
Çıktımızın tamamı 'bin' adlı tek bir klasöre yerleştirilir. Bu klasörün, yazılımın konuşlandırıldığı zamankiyle aynı olması fikri. Bu, geliştirici kurulumu dağıtım kurulumundan farklı olduğunda ortaya çıkan sorunları önlemeye yardımcı olur.
4. Çözüm klasörleri işleri organize etmenin iyi bir yolu mu?
Deneyimlerimize göre hayır. Bir kişinin klasör yapısı diğerinin kabusu. Derinlemesine iç içe geçmiş klasörler, herhangi bir şeyi bulmak için gereken süreyi artırır. Tamamen düz bir yapıya sahibiz ancak proje dosyalarımıza, derlemelerimize ve ad alanlarımıza aynı adı veriyoruz.
Projeleri yapılandırma şeklimiz tek bir çözüm dosyasına dayanmaktadır. Projelerin kendisi değişmemiş olsa bile, bunu inşa etmek uzun zaman alıyor. Buna yardımcı olmak için, genellikle başka bir 'geçerli çalışma kümesi' çözüm dosyası oluştururuz. Üzerinde çalıştığımız tüm projeler buna eklenir. Derleme süreleri büyük ölçüde iyileştirilmiştir, ancak gördüğümüz bir sorun Intellisense'in mevcut kümede olmayan projelerde tanımlanan türler için başarısız olmasıdır.
Çözüm düzenimizin kısmi bir örneği:
\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]