複数のサブプロジェクト (約 20) で構成される .NET プロジェクトがあります。いくつかのソリューションがあり、それぞれが特定のソリューションに関連するサブプロジェクトのみを含んでいます。
任意の解決策を可能にするために、サブプロジェクトはプロジェクト参照によって相互に参照することはなく、直接の dll 参照によって参照されます。HintPath に $(Configuration) を含めるために csproj ファイルを微調整する必要があるため、デバッグ ビルドはデバッグ dll を参照し、リリース ビルドはリリース dll を参照します。
すべてうまく機能しますが、大きな問題が 2 つあります。
- VS は、依存関係の計算のために dll 参照を認識しません。新しいプロジェクトまたは参照が追加されるたびに、[プロジェクトの依存関係] ダイアログを使用して依存関係を手動で指定する必要があります。これは面倒です。
- Resharper も Visual Assist も使用していません (優れたツールですが、使用していません。当然のことです)。私たちは、標準の "Browse to Definition" コマンド (たとえば、ソース コードのコンテキスト メニューから利用できます) を使用したいと考えています。重大な問題は、あるプロジェクトがプロジェクト参照を使用して他のプロジェクトを参照している場合にのみクロスプロジェクトで機能し、参照先のプロジェクトがソリューションに含まれていても、参照が直接 dll 参照である場合は機能しないことです! ソースに移動する代わりに、メタデータに移動するため、これは本当に残念です。
私たちのように dll 参照を使用し、これら 2 つの問題を何とか克服した人々のアドバイスを求めています。ありがとう。
編集:
「定義の参照」の問題に加えて、プロジェクト参照の代わりに Dll 参照を使用すると、プロジェクト マネージャーに 1 回だけコストがかかることに注意してください。これは、新しいプロジェクトまたは新しい依存関係が追加されたときに、影響を受ける各ソリューションのプロジェクト依存関係を更新することです。導入する必要があります。これらのプロジェクトの依存関係は .sln ファイルに保持され、新しいプロジェクトが到着するか、新しい依存関係が作成されるまで、メンテナンスは必要ありません。これはそれほど頻繁には発生しません。
VS と同じ .sln ファイルを使用する CI サーバーでプロジェクトをビルドするために msbuild を使用しています。すべてのサブプロジェクトを含むメインの .sln ファイルが 1 つあります。
参照が dll 参照であるため、両方のプロジェクトが同じソリューションにあるにもかかわらず、別のプロジェクトの定義を参照できないという、より深刻な問題を強調したいと思います。これは面倒で迷惑です.VSが機能を有効にするためにプロジェクト参照を主張する理由はありません. Resharper や Visual Assist などの他のツールには、この制限はありません。悲しいかな、私たちはこれらのツールを持っておらず、観察可能な将来に持っている可能性は低い.