他の人が言ったように、ソリューション エクスプローラーでソリューションを右クリックし、[追加] > [既存のプロジェクト] を選択して、共通プロジェクトの .csproj ファイルを参照すると、元の場所からソリューションに含まれます。
ただし、これには 2 つの問題があり、チームの規模に応じて、問題になる場合とならない場合があります。
共通プロジェクトは、ソリューション ファイルへの相対パス (つまり、...\CommonProject\Common.csproj) を使用して各ソリューションに含まれます。これは、すべての開発者が同じ作業ファイル構造を持っている必要があることを意味します。そうしないと、メイン プロジェクトを開こうとしたときにエラーが発生します。
共通プロジェクトが複数のプロジェクト (たとえば、A と B の 2 つ) によって参照されており、プロジェクト A で作業している開発者がタスクの一部として共通プロジェクトに変更を加える必要があるというシナリオでは、その開発者が知る方法はありません。彼らが行った変更により、実際にプロジェクトBをチェックアウトしてコンパイルすることなくプロジェクトBが壊れる場合。より多くのプロジェクトが共通プロジェクトを参照するにつれて、これが発生するリスクは管理不能になるまで増加します。
繰り返しますが、他の人が言ったように、これを行う「正しい」方法はありません。ただし、私が取ったアプローチは次のとおりです。
Cruise Control などの継続的インテグレーションを使用して、プロジェクトのビルドを管理し、共通プロジェクトをスタンドアロン プロジェクトとしてサーバーに配置します。
ソース管理下にディレクトリを作成して、ビルドされた共通 DLL を格納します。ビルド マシンでこのディレクトリをチェックアウトすると、共通プロジェクトがビルドされるたびに、出力 DLL が DLL フォルダーにコピーされ、これらの変更がソース管理にコミットされます。
すべての開発者のコンピューターとビルド サーバーで環境変数を使用して、共通の DLL フォルダーの場所を制御し、ハードコードされたパスではなく、その変数を使用して DLL を参照します。(つまり、C:\Source\MyCommonProjectDLLS\Common.dll ではなく、変数 'MyCommonLocation' を C:\Source\MyCommonProjectDLLS に設定して $(MyCommonLocation)\Common.dll を使用します)
共通 DLL を参照するプロジェクトの場合、そのプロジェクトのビルド サーバーに CI トリガーを設定して、共通 DLL フォルダーを監視します。変更がコミットされるたびに、ビルド サーバーはすべての使用プロジェクトをビルドする必要があります。
これにより、他のプロジェクトの重大な変更をコミットしているかどうかがすぐにわかります。唯一の欠点は、このモデルでは、使用するプロジェクトが、作成されるとすぐに共通 DLL への更新を強制されることです。別の方法として、共通 DLL をビルド時にソース管理リビジョンからバージョン管理し、各バージョンを共通 DLL フォルダーの下の独自のサブディレクトリに配置する方法があります。したがって、次のようになります。
一般的な DLL
-1.0.0.1234
-1.0.0.1235
-1.0.0.1236
等々。この利点は、コードの新しいバージョンを参照するだけで、各プロジェクトが共通 DLL を更新するタイミングを選択できることです。ただし、これは一部のプロジェクトが必要以上に古いバージョンの共通コードを残されていることを意味するため、両方の方法をカットします。これにより、最終的にそれらの変更を導入するときに関連する作業が増加する可能性があります。