IIS 6 と Windows Server 2003 で複数の ASP.NET 2.0 Web サイトを持っています。各サイトはいくつかの DLL (デザイン、ロジックなど) を参照しています。各サイトは、リサイクル手法に関する既定の構成を持つ異なる ApplicationPool にあります。
すべての DLL には厳密な名前 (遅延なし) が付けられ、変更されないバージョン (2.0.0.0) があり、すべての DLL は GAC に配置されます。
Webサイト「A」で使用するために何か(メソッド、クラスなど)が変更されたGAC(つまりMyLibrary.dll)のDLLを更新した後、「A」アプリケーションプールのみをリサイクルした後、同じ DLL を参照する Web サイト "B" にアクセスしようとすると、その DLL に関する一般的なエラーが発生します。
見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULT からの例外: 0x80131040)
もちろん、コード、同じ強力なキー、同じバージョン、カルチャではなく、DLL では何も変更されていません。もちろん、「B」アプリケーションプールをリサイクルすると、エラーは消えます。
奇妙でランダムな(言わざるを得ない!) 動作を生成するものは何ですか? ハッシュのように、アセンブリを比較するために使用されるものは他にありますか?
補遺
- Perpetualcoderは、DLL がどのように参照されるかを私に尋ねました。完全修飾名がある場合は、web.config の次の行だと思います。
assembly="MyNamespace.MyComponent, Version=2.0.0.0, Culture=neutral, PublicKeyToken=1234567890ASDFGH"