74

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

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

4

4 に答える 4

85

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

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

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

.NET が厳密な名前のアセンブリを読み込むとき、最初に使用するバージョン番号を決定しようとします。最初に参照を介してこれを行い、次に発行者ポリシーを探し、次に構成ファイルでバインディング リダイレクトを探します。

これを行った後、GAC でアセンブリを検索し、指定された任意のコードベースでアセンブリを検索し、さまざまなファイル システム フォルダーで DLL を調べます。これらのステップのいずれかで適切なバージョンのアセンブリが見つかった場合、処理は停止します。

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

于 2009-06-11T14:16:19.890 に答える
11

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

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

<probing>アセンブリの場所を指定するための要素も参照してください。

于 2011-04-05T04:05:39.780 に答える
2

私は Adam Sills と同じ考えを言っているのかもしれませんが、私の理解のために言い直しました。私自身のテストを通じて、これが起こるように見えます:

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

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

于 2010-02-03T22:06:02.537 に答える
0

Windows ソフトウェア開発キット (SDK) に含まれている Assembly Binding Log Viewer (Fuslogvw.exe) を使用して、ログ ファイルのバインディング情報を表示できます。

s

于 2010-04-29T19:34:00.063 に答える