2

Visual Studio 2010 を使用して、.net Framework 4.0 を開発および構築しています。また、基本的なプラグイン システムには Managed Extensibility Framework も使用しています。

私には2つの解決策があります:

6 つのプロジェクトを含む主なソリューション。1 つが実行可能で、残りの 5 つがクラス ライブラリです。それらは相互に参照し、ソリューション レベルの bin フォルダーに組み込まれます (bin フォルダーはプロジェクト フォルダーの隣にあります)。このようにして、ビルドされたすべての bin ファイルが同じフォルダーに配置され、MEF はすべての DLL を単純な DirectoryCatalog に収集できます。

これは正常に機能します(ただし、アプリケーションを起動しても他のすべてのプロジェクトは依存関係ではないため再構築されませんが、これはこの質問の対象ではありません)。

もう 1 つの (拡張) ソリューションには 2 つのプロジェクトがあり、どちらもクラス ライブラリであり、MEF がカタログを構築するために使用するディレクトリに追加する必要があります。

これを行うにはいくつかの方法がありますが、最もクリーンな方法を見つけることができません。

したがって、解決する問題は次のとおりです。

  1. 拡張ソリューションのプロジェクトは最初のソリューションのプロジェクトを参照するため、参照の追加画面でメイン ソリューションの bin フォルダーに移動し、必要なすべての参照を追加しました。メイン ソリューションのビルド時に参照が更新されますか、それとも何らかの方法で DLL を手動でコピーする必要がありますか?

    • インテリセンスは変更を認識する必要があるため、メイン ソリューションを変更してビルドした後、拡張ソリューションの編集中にインテリセンスを更新する必要があります。
    • メイン ソリューションはそれ自体でビルド可能であり、拡張ソリューションについては何も知りません。そのままにしておきましょう。dll を他のソリューションのフォルダーにコピーするビルド タスクをメイン ソリューションに書き込みません。
    • ソリューションは SVN サーバーでホストされます。新しいコンピューターで ankhsvn を使用してソリューションを取得し、両方のソリューションを構築する際にそれ以上の構成が必要ない場合、それは大きなプラスになります。
  2. 拡張ソリューションのプロジェクトをビルドする際に、DLL を MEF がそのカタログに使用するディレクトリ (メイン ソリューションの bin ディレクトリ) にコピーする必要があります。svn から新鮮に取り込んでもうまくいくといいですね。これはビルド タスクで実行できますが、他のソリューションのフォルダーを参照する最適な方法はどれですか?

    • ソリューションディレクトリが互いに隣り合っている(そしてデフォルト名を持っている)必要がある場合、それは大きな妥協にはならないと思います(このようにして、他のレベルの ../ を使用して参照することができます)。それはまともな解決策ですか?私が気づいていない欠点はありますか?
4

1 に答える 1

0

問題 1 に対処する別の方法があります。

  • 必要なプロジェクトを Main.sln から に追加しExtension.slnます。これを行うには、ソリューションのコンテキスト メニューから [既存のプロジェクトを追加] を選択します。
  • 拡張プロジェクトの参照を、出力 dll ではなく、追加されたプロジェクトに更新します。Visual Studio は、出力 dll の場所を特定し、プロジェクトをいつビルドする必要があるかを決定します。
  • solution folder名前付きの「依存関係」などを追加して、そこにすべてのプロジェクトを移動することもできMain.slnます。このようにして、どのプロジェクトが「ゲスト」であるかを知ることができます。

これにより、問題 1 のすべての箇条書きが解決されますが、依存プロジェクトを変更できるため注意が必要ですExtension.slnプラスは、余分な作業なしで新しい開発マシンで動作する、より簡単な方法でコードをデバッグできることです。

そうは言っても、私は単純な 8 つのプロジェクトすべてを含む単一のソリューションを使用します。ソリューションが巨大になった場合 (〜 100 プロジェクト) にのみ、私はこれを選びます。

さまざまなリポジトリについてのコメントについて:

また、これを SVN にコミットすると、「既存のプロジェクト」も新しいリポジトリにコミットされますか?

私はそうは思わない。それらを同じ SVN リポジトリに保持する場合 (そうしない理由がわかりません)、問題ありません。多くのソリューションを同じリポジトリに追加できます。それらが関連している限り、それは正しいことです。

もう 1 つの重要なテストは、リポジトリから新しいコピーを取得してビルドすることです。これはビルド サーバーで毎日行うことができ、早期に問題を特定するのに役立ちます。そのために必要な手順が少ないほど良いです。

于 2013-02-26T10:28:14.157 に答える