2011-11-14 3 views
1

私は、C++プロジェクトと、Interopを使用した最初のメソッドからメソッドを呼び出すC#プロジェクトのソリューションを用意しています。 ハードコードされたパスを避けたいので、私はapp.configでC++ dllのパスを設定する方法を見つけました。 私の問題は、私のC++のDLLは、私のbin/Releaseとbin/Debugフォルダにコピーしなければならない他のDLLに依存しているということです。どうすればこれを避けることができますか? app.configで第三者のDLLへのパスを設定できるといいですね。私はこのサードパーティのC++ dllのコピーを避けるにはどうすればよいですか?

<probing privatePath="bin\DLLs" />

を見つけたが、唯一のアプリケーションのサブディレクトリのために働くようだ 。

答えて

2

DLLのハードコード位置を指定しないでください。ディレクトリを%PATH%変数に置きます。環境としてWindowsを仮定すると、Search path for loading DLLsが読み込まれます。

編集: %PATH%は環境変数であるため、Environment.SetEnvironmentVariablesで設定できます。私は設定ファイルからprivatePathを読み込み、与えられた方法を使って%PATH%に追加します。設定ファイルからの読み込みは、ConfigurationManagerクラスで行うことができます。

+0

ですハードコーディングのパスは、私が言及したように。 インストール中にディレクトリを%PATH%変数に入れるにはどうしたらいいですか?あなたが提供したリンクにヒントがありません。 app.configでパスを指定できますか?それが私の好みの選択肢だろう。 – Ben

+0

私はアプリケーション起動時に(App.Run()の前のProgram.cs内で)AppSettingsReaderで読み込んで、EnvironmentSetEnvironmentVariable()でPATH変数に追加するapp.configのにキーを追加しました。これはまさに私が探していたものです! – Ben

1

私はあなたのポストビルドイベントでコマンドをfolloing書き込みます(ですから、マニュアル作業を行う必要はありません)

xcopy /s c:\source\your_dll_folder c:\your_target_folder\bin\debug 
xcopy /s c:\source\your_dll_folder c:\your_target_folder\bin\Release 

ここでは、プロジェクトのポストビルドイベントの場所のプロパティは、私はないです enter image description here

+0

私はこれもうまくいくと思いますが、起動時にPATH変数を設定することで、コピーしない方法が好きです。とにかくありがとう :) – Ben

関連する問題