私はC#アプリケーションプログラムを持っています.App.exeを呼び出してみましょう。 A.dllという名前のDLLを参照し、このDLLは別のDLL、つまりB.dllを参照します。しかし、それらが参照される方法は少し異なります。 A.dllのコードでは、B.dllを直接参照しています(Project> References> Add B.dll)。しかし、私のApp.exeには、実行時にAssembly.Load()などを使ってA.dllをロードするコードがあります。別のDLLからDLLを参照する
したがって、App.exe ----(runtime loading)---> A.dll - - (直接参照)---> B.dll
3つのもの(App.exe、A.dll、B.dll)はすべて同じディレクトリにありますが、ExeDirとしましょう。今私がしたいのは、A.dllとB.dllをExeDirのサブディレクトリに置くことです。 A.dllのパスを指定し、そのパスからA.dllを読み込むようにApp.exeに要求するApp.configファイルを使用してこれを行うことができます。ここまでは順調ですね。
しかし私がこれを行うと、.NETは私に、A.dllと同じディレクトリにあるB.dllを見つけることができないというエラーを出します。元のディレクトリ(App.exeと同じディレクトリ)に戻すと正常に動作します。つまり、A.dllはサブディレクトリに置くことができますが、B.dllは元のディレクトリにある必要があります。
サブディレクトリに両方のDLLを保存する方法はありますか?
返信D Stanleyに感謝します。しかし、私はここで少し迷っています。私はここで何をすべきか正確に教えていただけますか?この要素をアセンブリパスで指定するだけですか? – Sach
はい、EXEに相対的です。たとえば、MSDNの例では、バインダーはデフォルトで 'BIN'フォルダー内を検索しますが、' bin2'フォルダー、 'bin2 \ subbin'フォルダー、および' bin3'フォルダーも検索します。 'bin; bin2 \ subbin; bin3'をA.dllとB.dllが入っているフォルダ(EXEからの相対パス)に置き換えてください。A.dllへのパスがA.dllに含まれている場合、パスを指定する必要はなくなりました。プロービングパス。 –
Stanleyありがとう、私はそれを働かせました! 私はここで私の完全な問題を説明しなかったのは私のせいでした。私が別々のフォルダにDLLを必要とした理由は、いくつかの異なるA.dll(コンテンツが異なる)があり、それぞれがB.dllを参照する可能性があるからです。ですから、より安全なコードを実装したかったので、A.dllがB.dllを参照したい場合は、内部で変わる可能性があります。しかし、それはできないように見えます。それでも、ありがとう!あなたは私の元の質問に答えました。 – Sach