対処すべき109の個別のプロジェクトがあるため、同様の問題があります。私たちの経験に基づいて元の質問に答えるには:
1. プロジェクト間の参照をどのように処理するのが最善ですか?
「参照の追加」コンテキスト メニュー オプションを使用します。「プロジェクト」が選択されている場合、依存関係は既定で単一のグローバル ソリューション ファイルに追加されます。
2.「ローカルにコピー」はオンかオフか?
私たちの経験ではオフです。余分なコピーは、ビルド時間を増やすだけです。
3. すべてのプロジェクトを独自のフォルダーにビルドするか、すべて同じ出力フォルダーにビルドする必要があります (それらはすべて同じアプリケーションの一部です)。
すべての出力は、'bin' という 1 つのフォルダーに入れられます。このフォルダは、ソフトウェアが展開されたときと同じであるという考えです。これにより、開発者のセットアップが展開のセットアップと異なる場合に発生する問題を防ぐことができます。
4. ソリューション フォルダは整理に適していますか?
いいえ、私たちの経験ではありません。ある人のフォルダ構造は別の人の悪夢です。深くネストされたフォルダーは、何かを見つけるのにかかる時間を増やすだけです. 完全にフラットな構造ですが、プロジェクト ファイル、アセンブリ、および名前空間に同じ名前を付けます。
プロジェクトを構造化する私たちの方法は、単一のソリューション ファイルに依存しています。プロジェクト自体が変更されていなくても、これを構築するには長い時間がかかります。これを支援するために、通常は別の「現在のワーキング セット」ソリューション ファイルを作成します。私たちが取り組んでいるプロジェクトはすべて、これに追加されます。ビルド時間は大幅に改善されましたが、現在のセットにないプロジェクトで定義された型に対して Intellisense が失敗するという問題が 1 つあります。
ソリューション レイアウトの部分的な例:
\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]