2011-02-10 18 views
10

をターゲットに、私はこの質問をする前に頼まれていることを実感 - しかし、答えのどれも私の特定の場合には適用されません:のVisual Studio:コピー依存するDLLフォルダ

  • 私はネイティブC++ EXEプロジェクトを含むソリューションを持っていますこれは40 +ネイティブC++ DLLプロジェクト(同じソリューション内)に依存します。

  • EXEプロジェクトをデバッグ、リリース(およびプロフィール通常の構成を有しているが、それらので、同じソースコードベースは、3つの異なるアプリケーションを構築するために使用されている(たとえばA1A2A3)。さらに、x32とx64を対象としているので、合計3 x 3 x 2 = 18のプロジェクト構成になります。

  • はDLLプロジェクトは、すべての3つのターゲットアプリケーションによって共用するので、(デバッグリリースプロフィール)×2(X32、x64)の= 6つの構成は、わずか3がされています。

  • EXEプロジェクトはDLLに依存するため、DLLプロジェクトの関連出力を変更するたびにターゲットフォルダ(またはそのサブフォルダ)にコピーする必要があります。

どのようにDLLの更新を処理しますか?それはの関連する出力フォルダA1A2A3にDLLをコピーする必要がありますよう

  • 各DLLプロジェクトのビルド後のアクションは、(うまく)は動作しません。出力フォルダを変更すると、50個のDLLプロジェクトのそれぞれでビルド後のアクションを変更する必要があります。

  • 現在、DLL自体をプロジェクト項目としてEXEプロジェクトに追加し、カスタムビルドツールを設定して出力フォルダにコピーしました。しかし、それは私に各DLLを6回追加する必要があるので、私は6 x 50 = 300のDLLで終わる!

実際に必要なのは、ローカルコピーオプションのようなものです。残念なことに、アセンブリのみが動作します。このビルド設定を簡略化するためにソリューションを提案しますか?

答えて

5

私がやるべきことは、すべてのDLLを(Debug/Releaseなどに固有の)単一のフォルダに入れてEXEの適切な出力フォルダにコピーすることです。

これは2つだけの操作で行うことができます$(ConfigurationName)_$(PlatformShortName)

  • などのフォルダにすべてのDLLの出力ディレクトリを設定し

    • は、すべてのDLLを右クリック

    • プロジェクトを選択します - >すべてのプラットフォームとすべてのプラットフォームを選択
    • outp UTでdir
  • はそのコピー$(ConfigurationName)_$(PlatformShortName)\*.dll EDIT

$(TargetDir)に問題が第二であり、すべての構成に、共通EXEプロジェクトにビルド後のアクションを追加します。あなたのEXEの$(ConfigurationName)があなたのDLLプロジェクトと同じではないからです。わからないかもしれませんが、対応する設定を推測する方法があります.18の設定すべてに対して、1つのポストビルドイベントが残っています。それは新しいSOの質問になることができます:)

+0

優秀!なぜ私はそれについて前に考えなかったのですか? –

+0

おめでとうございました:)私の編集では問題は見えますが... – CharlesB

+0

はい、気づきました。しかし、それは管理可能です。つまり、ビルド後の3つのアクションがわずかに異なることを意味します。 –