1. ホーム
  2. asp.net

binとgacの両方にDllがありますが、どちらが使われるのでしょうか?

2023-12-10 10:58:45

質問

フロントエンドの変更のみで多くの Web サイトに展開される Web アプリケーションがあります。共有バックエンド部分は GAC に DLL を持っているので、その 1 つの DLL を更新するだけで、すべてのサイトが更新されます。

新しい機能がリリースされる前にテストするために、/bin フォルダーにある DLL で GAC をオーバーライドする方法はありますか?

どのように解決するのですか?

参照されているDLLと同じバージョン番号の場合、GACが使用されます。

バージョン番号をインクリメントし、新しいバージョン番号を参照するウェブサイトを再構築し、新しいバージョンを /bin ディレクトリに配置すると、その DLL が使用されます。

バージョン番号を変更したくない場合は、かなりの確率でアウトです。

.NET が強力な名前の付いたアセンブリをロードするとき、最初に、使用するバージョン番号を決定しようとします。これは、まず参照によって行われ、次に パブリッシャー ポリシー を探し、次に バインディング・リダイレクト を設定ファイルから探します。

これを実行した後、GAC 内でアセンブリを探し、次に任意の で指定されたコードベース にあるアセンブリを探し、次に DLL を探すためにさまざまなファイル システム フォルダーを探します。これらのステップのいずれかで正しいバージョンのアセンブリが見つかると、停止します。

強力な名前のアセンブリのバージョン番号を変更しない場合、.NET は GAC 内のオリジナルのものを見つけ、検索を停止します。1 つを見つけると停止し、GAC で探すのが最初なので、新しいバージョン番号も指定しない限り、アセンブリのコードベースを指定しても意味がないことに注意してください。