フロントエンドの変更のみで多くの Web サイトにデプロイされた Web アプリケーションがあります。共有バックエンド部分には GAC に DLL があるため、その 1 つの DLL を更新するだけで、すべてのサイトが更新されます。
/bin フォルダー内の DLL で GAC をオーバーライドして、新機能がリリースされる前にテストする方法はありますか?
フロントエンドの変更のみで多くの Web サイトにデプロイされた Web アプリケーションがあります。共有バックエンド部分には GAC に DLL があるため、その 1 つの DLL を更新するだけで、すべてのサイトが更新されます。
/bin フォルダー内の DLL で GAC をオーバーライドして、新機能がリリースされる前にテストする方法はありますか?
参照されている DLL と同じバージョン番号の場合、GAC が使用されます。
バージョン番号を増やし、新しいバージョン番号を参照して Web サイトを再構築し、新しいバージョンを /bin ディレクトリに配置すると、その DLL が使用されます。
バージョン番号を変更したくない場合は、ほとんど運がありません。
.NET が厳密な名前のアセンブリを読み込むとき、最初に使用するバージョン番号を決定しようとします。最初に参照を介してこれを行い、次に発行者ポリシーを探し、次に構成ファイルでバインディング リダイレクトを探します。
これを行った後、GAC でアセンブリを検索し、指定された任意のコードベースでアセンブリを検索し、さまざまなファイル システム フォルダーで DLL を調べます。これらのステップのいずれかで適切なバージョンのアセンブリが見つかった場合、処理は停止します。
厳密な名前付きアセンブリのバージョン番号を変更していない場合、.NET は GAC で元のアセンブリを見つけ、検索を停止します。検出すると停止し、GAC を最初に検索するため、新しいバージョン番号も指定しない限り、アセンブリのコードベースを指定しても意味がないことに注意してください。
<codebase>
Elementを使用して、\bin フォルダー内のアセンブリで GAC をオーバーライドできました。
web.config ファイルで指定することにより<codebase version="1.2.3.4" href="/bin/MyAssembly.dll" />
、GAC で指定されたバージョンではなく、このバージョンを使用するようにアプリケーションに指示できます。
<probing>
アセンブリの場所を指定するための要素も参照してください。
私は Adam Sills と同じ考えを言っているのかもしれませんが、私の理解のために言い直しました。私自身のテストを通じて、これが起こるように見えます:
これが正しいことを願っています...
Windows ソフトウェア開発キット (SDK) に含まれている Assembly Binding Log Viewer (Fuslogvw.exe) を使用して、ログ ファイルのバインディング情報を表示できます。
s