16

次のエラーを散発的にスローするWebサイトがあります。

'/'アプリケーションのサーバーエラー。

ファイルまたはアセンブリ'ICSharpCode.SharpZipLib、Version = 0.85.3.365、Culture = neutral、PublicKeyToken=1b03e6acf1164f73'またはその依存関係の1つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULTからの例外:0x80131040)

これで、このDLLに依存していることがわかりましたが、システムにはバージョン0.85.5があります。サーバーから古いバージョンのDLLをすべて体系的に削除し、すべてを再コンパイルして再公開しました。しかし、私が何をしても、再公開するたびに、誰かがサイトにアクセスした最初の1〜2回は、このエラーが発生するようです。その後、1〜2回更新するとエラーがなくなり、サイトは正常に機能します。

さらに奇妙なのは、エラーがスローされたコード行を見ると、次のようになります。

URLRewriter.ProcessRewritingResult(status, excludedEnum, siteName, viewMode, relativePath);

URLRewriterサードパーティパッケージ(Kentico CMS -CMS.URLRewritingEngine.dll)のクラスです。そのDLLでDependencyWalkerを実行しましたが、ICSharpCode.SharpZipLibに依存関係はまったく見つかりませんでした。

これを修正する方法はありますか?

編集: @JeremyThompsonの提案で、エラーをキャッチするためにProcessMonitorを実行しました。これがスクリーンダンプで、関連する部分が強調表示されています(プライバシー上の理由から1つのフォルダ名が隠されています)。右クリックなどでフルサイズでご覧いただけます。

ここに画像の説明を入力してください

編集:これがエラーからの負荷トレースです。これは役に立ちますか?

===事前バインド状態情報===

ログ:ユーザー= MY-SERVER-12 \ Administrator

ログ:DisplayName = ICSharpCode.SharpZipLib、Version = 0.85.3.365、Culture = neutral、PublicKeyToken = 1b03e6acf1164f73(完全に指定)

ログ:Appbase = file:/// C:/ inetpub / wwwroot / MySite /

ログ:初期PrivatePath = C:\ inetpub \ wwwroot \ MySite \ bin

アセンブリの呼び出し:CMS.WebAnalytics、Version = 6.0.4377.2467、Culture = neutral、PublicKeyToken=834b12a258f213f9。

===

ログ:このバインドは、デフォルトのロードコンテキストで開始されます。

ログ:アプリケーション構成ファイルの使用:C:\ inetpub \ wwwroot \ MySite \ web.config

ログ:ホスト構成ファイルの使用:C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet.config

ログ:C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config\machine.configのマシン構成ファイルを使用しています。

ログ:ポリシー後の参照:ICSharpCode.SharpZipLib、Version = 0.85.3.365、Culture = neutral、PublicKeyToken = 1b03e6acf1164f73

ログ:新しいURL file:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files / root / 9760eb69 / 275bb3db/ICSharpCode.SharpZipLib.DLLのダウンロードを試みています。

ログ:新しいURLファイルのダウンロードを試みています:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files / root / 9760eb69 / 275bb3db / ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.DLL。

ログ:新しいURLファイルのダウンロードを試みています:/// C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib.DLL。

ログ:新しいURLファイルのダウンロードを試みています:/// C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.DLL。

ログ:新しいURL file:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files / root / 9760eb69 / 275bb3db/ICSharpCode.SharpZipLib.EXEのダウンロードを試みています。

ログ:新しいURLファイルのダウンロードを試みています:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files / root / 9760eb69 / 275bb3db / ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.EXE。

ログ:新しいURLファイルのダウンロードを試みています:/// C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib.EXE。

ログ:新しいURLファイルのダウンロードを試みています:/// C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.EXE。

4

7 に答える 7

5

したがって、Kenticoは独自の依存関係を持っていることがわかりますICSharpCode.SharpZipZip.dll-そしてそれは古いバージョンを見つけることを期待しています。私はここで同様の解決策を見つけました。次のブロックをweb.configファイルに挿入することで、このエラーをようやく追放したようです。

<runtime>
  <assemblyBinding>
    <dependentAssembly>
      <assemblyIdentity name="ICSharpCode.SharpZipLib" publicKeyToken="1b03e6acf1164f73"/>
      <bindingRedirect oldVersion="0.85.3.365" newVersion="0.85.5.452"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

私がまだ理解していないのは、なぜDependencyTrackerがこの依存関係を表示しなかったのかということです。

編集:ああ、これは結局それを解決しませんでした。現在はそれほど頻繁には発生していないようですが、今日IISを再起動した後、テスターの1人が古いエラーメッセージを再度受け取りました。:-(

于 2012-07-15T09:23:01.187 に答える
5

これで、このDLLに依存していることがわかりましたが、システムにはバージョン0.85.5があります。サーバーから古いバージョンのDLLをすべて体系的に削除し、すべてを再コンパイルして再公開しました。

'依存関係'はDLLの古いバージョンを期待しているように聞こえます。システム上の新しいバージョン(0.85.5)すべてのコピーを古いバージョン( 0.85.3.365 )に置き換えてみませんか?(Webアプリケーションの「bin」フォルダーと「GAC」の両方を必ず確認してください:c:\ windows \ assembly)

必要に応じて、ここから古いバージョンをダウンロードできます:http ://sourceforge.net/projects/sharpdevelop/files/SharpZipLib/0.85.3/

ノート:

  • DLLを置き換えた後、IISを停止し、すべての一時ASP.Netファイルをクリアします。例:C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files
  • また、古いバージョンを参照するようにVisualStudioSolutionを更新することを忘れないでください。

乾杯

ピート

于 2012-07-22T07:43:04.090 に答える
4

ユーザーが最初に1〜2回サイトにアクセスすると、エラーが発生するとおっしゃっています。

この問題を解決するには、 Process Monitorを実行して、アセンブリを見つけてロードする場所を確認することをお勧めします。

-iisreset-
サーバーでProcessMonitorを開始し
ます-数ページを表示し、問題をできるだけ早く再現します-ProcessMonitor
トレースを
停止します-プロセスモニタートレースを検索しますICSharpCode.SharpZipLib

それが失敗した場合は、他に何が原因であるかを確認してください。

-ProcessMonitorの結果をCSVとして保存します-Excel
でCSVを開きます-
すべての列をフィルタリングします-
アクセスが拒否された列のドロップダウンリストを選択しますまたは...

これにより、エラーの問題点がわかります。Could not load file or assembly

于 2012-07-15T07:37:31.403 に答える
1

バインディングリダイレクトで正しい方向に進んでいたと思います。ただし、アプリを古いバージョンに対してバインドする代わりに、依存するアセンブリを新しいバージョンに対してバインドしようとすることをお勧めします。

通常、古いバージョンを強制することはより悪い選択です。これは、依存するアセンブリを修正する可能性がある一方で、新しいバージョンに依存するコードに互換性エラーを挿入できるためです。

于 2012-07-17T14:02:56.823 に答える
0

アセンブリの読み込みをログに記録し、読み込みエラーに関する詳細を提供するFuslogvw.exeアプリを使用できます。

詳細はこちら: http: //msdn.microsoft.com/en-us/library/e74a18c4.aspx

于 2012-07-17T12:48:49.557 に答える
0

Kentico CMSとアプリケーションは同じアプリケーションプールで定義されていますか?独自のアプリケーションプールでアプリケーションを実行してみてください。

発生する可能性があるのは、ワーカープロセスがリサイクルされる場合、アプリケーションが最初に追加される場合、Kentico CMSが最初に追加される場合です。これにより、ICSharpCode.SharpZipLibの解決方法が変わります。

偶然に1回または2回更新を行うと、アプリケーションが最初にロードされ、それが機能することを意味します。

IISおよびAsp.Netのアプリケーションプールとは何ですか?

更新:アプリケーションはWebサイト(最初のアクセスでコンパイルされたもの)ですか、それともWebプロジェクト(Visual Studioでプリコンパイルされたもの)ですか。Webサイトの場合、Webプロジェクトに変換して試してみてください。

于 2012-07-17T12:44:05.893 に答える
0

AppDomain.CurrentDomain.AssemblyResolveにアタッチしてみてください。これにより、アセンブリがいつ/どのようにロードされるかを確認し、ロード場所を明示的に設定できます。

于 2012-07-17T08:08:39.733 に答える