54

.NET フレームワークがいくつかの場所で参照される DLL を探すことを知っています

  • グローバル アセンブリ キャッシュ (GAC)
  • AppDomain に追加されたすべてのプライベート パス
  • 実行中のアセンブリの現在のディレクトリ

それらの場所はどのような順序で検索されますか? 一致が見つかった場合、DLL の検索は中止されますか?それともすべての場所で続行されますか?

また、それらの場所を確認または拒否し、私が言及しなかった他の場所を提供してください.

4

3 に答える 3

56

アセンブリの読み込みは、構成ファイル、発行者ポリシー、アプリドメイン設定、CLR ホスト、部分的または完全なアセンブリ名など、さまざまな要因に依存するかなり複雑なプロセスです。

単純なバージョンでは、GAC が最初で、次にプライベート パスです。%PATH% は使用されません。

アセンブリ バインディング ログ ビューアー (Fuslogvw.exe)を使用して、アセンブリの読み込みに関する問題をデバッグすることをお勧めします。

EDIT http://msdn.microsoft.com/en-us/library/aa720133.aspxでは、プロセスについて詳しく説明しています。

于 2008-09-08T16:10:16.637 に答える
7

DLL の検索順序に関する MSDN の記事を参照している記事を見つけました。

マネージ コードの依存関係については、グローバル アセンブリ キャッシュが常に優先されます。GAC に既存の (またはポリシーを適用した新しい) コピーがある場合、アプリケーション ディレクトリのローカル アセンブリは取得されません。

これを考えると、MSDNリストは1つ追加で正しいと思います

0. グローバル アセンブリ キャッシュ
于 2008-09-08T16:08:33.613 に答える
2

「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

于 2008-09-08T15:50:45.047 に答える