109の個別のプロジェクトを処理する必要があるため、同様の問題が発生します。私たちの経験に基づいて元の質問に答えるには:
1.プロジェクト間の参照をどのように最適に処理しますか
「参照の追加」コンテキストメニューオプションを使用します。'project'が選択されている場合、依存関係はデフォルトで単一のグローバルソリューションファイルに追加されます。
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]