.NET フレームワークがいくつかの場所で参照される DLL を探すことを知っています
- グローバル アセンブリ キャッシュ (GAC)
- AppDomain に追加されたすべてのプライベート パス
- 実行中のアセンブリの現在のディレクトリ
それらの場所はどのような順序で検索されますか? 一致が見つかった場合、DLL の検索は中止されますか?それともすべての場所で続行されますか?
また、それらの場所を確認または拒否し、私が言及しなかった他の場所を提供してください.
アセンブリの読み込みは、構成ファイル、発行者ポリシー、アプリドメイン設定、CLR ホスト、部分的または完全なアセンブリ名など、さまざまな要因に依存するかなり複雑なプロセスです。
単純なバージョンでは、GAC が最初で、次にプライベート パスです。%PATH% は使用されません。
アセンブリ バインディング ログ ビューアー (Fuslogvw.exe)を使用して、アセンブリの読み込みに関する問題をデバッグすることをお勧めします。
EDIT http://msdn.microsoft.com/en-us/library/aa720133.aspxでは、プロセスについて詳しく説明しています。
「DLL をロードするときに、現在のディレクトリが最初に検索されることはなくなりました! この変更は、Windows XP SP1 でも行われました。デフォルトの動作では、最初にすべてのシステムの場所を検索し、次に現在のディレクトリを検索し、最後にユーザー定義のパスを検索します。 "
(参照。http://weblogs.asp.net/pwilson/archive/2003/06/24/9214.aspx )
アプリケーションで変更できるデフォルトの検索順序についても、MSDN で説明されています。http://msdn.microsoft.com/en-us/library/ms682586.aspx