2

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"

4

2 に答える 2

0

繰り返しますが、絶対に必要な場合を除き、ファイルを GAC に保存しないでください。asp.net は dll を一時フォルダーにコピーし、そこからサイトを実行します。読み込まれた dll と一時フォルダー内の dll の間でチェックサムが一致しない可能性があります。

サイトの dll は、サイトのローカルの bin フォルダーに保持する必要があります。これにより柔軟性が向上し、アプリケーション A の dll を更新してもアプリケーション B に悪影響を与えることはありません。また、ディスク容量を少し犠牲にするという低価格で xcopy を導入することもできます。

于 2008-12-19T08:27:15.183 に答える
0

Frans、それは私が理解している手順であり、もちろん展開する方法である可能性がありますが、完全修飾名が正しい場合でもエラーが発生する理由がわかりません。DLLマニフェストで見ましたが、ハッシュアルゴリズムの仕様があります。ASP.NET は DLL に対してハッシュ比較を実行しますか?

つまり、IIS/ASP.NET は、DDL の "A" が DLL の "B" ハッシュと一致しないことを検出しましたが、トリプレットの "key,culture,version" は同じであるため、ポップする代わりに更新しないのはなぜですかweb.config エラーが発生しましたか?

于 2008-12-19T10:24:35.243 に答える