web-dev-qa-db-ja.com

ビンとgacの両方のDLL、どちらが使用されますか?

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

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

68
John Boker

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

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

バージョン番号を変更したくない場合は、ほとんど運がありません。

.NETが強力な名前付きアセンブリを読み込むとき、最初に使用するバージョン番号を決定しようとします。最初に参照を介してこれを行い、次に publisher policies を探し、次に構成ファイルで binding redirects を探します。

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

強力な名前付きアセンブリのバージョン番号を変更しない場合、.NETはGACで元のバージョンを見つけ、検索を停止します。見つかった時点で停止し、GACを最初に見るため、新しいバージョン番号も指定しない限り、アセンブリのコードベースを指定しても効果がないことに注意してください。

79
Adam Sills

<codebase> Elementを使用して、\ binフォルダー内のアセンブリでGACをオーバーライドできました。

Web.configファイルで<codebase version="1.2.3.4" href="/bin/MyAssembly.dll" />を指定することにより、GACで指定されたバージョンではなく、このバージョンを使用するようにアプリケーションに指示できます。

また、アセンブリの場所を指定するための <probing> 要素をご覧ください。

11
IsolatedStorage

私はアダム・シルズと同じ考えを言っているかもしれないと思うが、私の理解のためにそれを言い直した。私自身のテストでは、次のようになります。

  • アプリがバージョン1.0.0.0でコンパイルされ、1.0.0.1がGACにある場合は、/ binから.dllを省略できます。
  • アプリがバージョン1.0.0.1でコンパイルされ、1.0.0.0がGACにある場合、GACを無視するには、.binを/ binに配置する必要があります。 GACバージョンがアプリの必要なバージョンより古い場合、/ binに新しいバージョンを含めない限り、エラーが発生します。

これが正しいことを願っています...

2
J.Hendrix

Windows Software Development Kit(SDK)に含まれているAssembly Binding Log Viewer(Fuslogvw.exe)を使用して、ログファイルのバインディング情報を表示できます。

s

0
BALKANGraph