Visual Studio 2010 を使用して、.net Framework 4.0 を開発および構築しています。また、基本的なプラグイン システムには Managed Extensibility Framework も使用しています。
私には2つの解決策があります:
6 つのプロジェクトを含む主なソリューション。1 つが実行可能で、残りの 5 つがクラス ライブラリです。それらは相互に参照し、ソリューション レベルの bin フォルダーに組み込まれます (bin フォルダーはプロジェクト フォルダーの隣にあります)。このようにして、ビルドされたすべての bin ファイルが同じフォルダーに配置され、MEF はすべての DLL を単純な DirectoryCatalog に収集できます。
これは正常に機能します(ただし、アプリケーションを起動しても他のすべてのプロジェクトは依存関係ではないため再構築されませんが、これはこの質問の対象ではありません)。
もう 1 つの (拡張) ソリューションには 2 つのプロジェクトがあり、どちらもクラス ライブラリであり、MEF がカタログを構築するために使用するディレクトリに追加する必要があります。
これを行うにはいくつかの方法がありますが、最もクリーンな方法を見つけることができません。
したがって、解決する問題は次のとおりです。
拡張ソリューションのプロジェクトは最初のソリューションのプロジェクトを参照するため、参照の追加画面でメイン ソリューションの bin フォルダーに移動し、必要なすべての参照を追加しました。メイン ソリューションのビルド時に参照が更新されますか、それとも何らかの方法で DLL を手動でコピーする必要がありますか?
- インテリセンスは変更を認識する必要があるため、メイン ソリューションを変更してビルドした後、拡張ソリューションの編集中にインテリセンスを更新する必要があります。
- メイン ソリューションはそれ自体でビルド可能であり、拡張ソリューションについては何も知りません。そのままにしておきましょう。dll を他のソリューションのフォルダーにコピーするビルド タスクをメイン ソリューションに書き込みません。
- ソリューションは SVN サーバーでホストされます。新しいコンピューターで ankhsvn を使用してソリューションを取得し、両方のソリューションを構築する際にそれ以上の構成が必要ない場合、それは大きなプラスになります。
拡張ソリューションのプロジェクトをビルドする際に、DLL を MEF がそのカタログに使用するディレクトリ (メイン ソリューションの bin ディレクトリ) にコピーする必要があります。svn から新鮮に取り込んでもうまくいくといいですね。これはビルド タスクで実行できますが、他のソリューションのフォルダーを参照する最適な方法はどれですか?
- ソリューションディレクトリが互いに隣り合っている(そしてデフォルト名を持っている)必要がある場合、それは大きな妥協にはならないと思います(このようにして、他のレベルの ../ を使用して参照することができます)。それはまともな解決策ですか?私が気づいていない欠点はありますか?