アセンブリを見つけることができません - エラーを追跡できません
-
27-10-2019 - |
質問
IIS 7.0で統合されたV4.0アプリケーションプールで実行されるWebサイトがあります。本日から、Windowsイベントログで以下の例外を取得します。ウェブサイトは1か月間オンラインであり、私はこれまでこの例外を得たことはありません。私は1時間ごとに同じ分で例外を取得しますが、少し奇妙です。
いくつかの考えられる理由:
動的にロードするライブラリが作成されました。
_searchProvider = (ISearchProvider)Activator.CreateInstance("SolrSearchProvider", "SearchProviders.SolrSearchProvider.SolrSearchProvider").Unwrap();
そのライブラリにはsolrnetに言及されています。
問題が何であるか、または解決策を見つけるためにもっと調査する方法がわかりますか?
An unhandled exception occurred and the process was terminated.
Application ID: DefaultDomain
Process ID: 7192
Exception: System.Runtime.Serialization.SerializationException
Message: Unable to find assembly 'SolrNet, Version=0.4.0.1001, Culture=neutral, PublicKeyToken=bc21753e8aa334cb'.
StackTrace: at System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly()
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType(BinaryAssemblyInfo assemblyInfo, String name)
at System.Runtime.Serialization.Formatters.Binary.ObjectMap..ctor(String objectName, String[] memberNames, BinaryTypeEnum[] binaryTypeEnumA, Object[] typeInformationA, Int32[] memberAssemIds, ObjectReader objectReader, Int32 objectId, BinaryAssemblyInfo assemblyInfo, SizedArray assemIdToAssemblyTable)
at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record)
at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
at System.AppDomain.Deserialize(Byte[] blob)
at System.AppDomain.UnmarshalObject(Byte[] blob)
Mauricio Scheffer氏は次のように述べています。@Dorin:実際の問題は循環依存関係です。それについての新しい質問を投稿することをお勧めします。
私は循環依存関係で問題を解決し、Windowsイベントログで同じエラーを取得し続けました。
最初にわかります Unable to find assembly 'SolrNet, Version=0.4.0.1001, Culture=neutral, PublicKeyToken=bc21753e8aa334cb'
そして、Webアプリケーションが再起動しています。
Windowsログで例外を取得する前に3〜10秒前に、既存のキーと同じプライマリキーを持つアイテムを挿入しようとしていたため、エンティティフレームワークによってスローされたサイトログファイルのエキスポリーションを特定しました。例外はコードでは扱われませんでしたが、カスタムエラーの設定のためにASP.NETによって扱われました
<customErrors mode="On" defaultRedirect="/Error.aspx" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="/Error.aspx"/>
</customErrors>
これは、Windowsログファイルのエラーと関係がありますか?
解決
この声明をブログ投稿で見つけました。 アプリケーションプールがダウンする理由
「リクエストに関連付けられていないスレッドの未処理の例外は、プロセスを削除します。これは、Application_Errorメソッドを介してハンドラーのセットアップがある場合でも発生します。」
一部のタイプのリクエストについては、リクエストスレッドから8つの新しいスレッドを作成して、同時クエリをsolRの8つの異なるコアにします。このコアの1つで、私はそのスレッドで処理しなかったという例外を取得していました。
同様のエラーが発生した場合、これが他の誰かに役立つことを願っています。助けてくれてありがとう。あなたの回答のために、私はコードを改善し、質問に関連しない他のエラーを発見して修正しました。また、私はASP.NETがどのようにアセンブリをロードし、それが大きな助けを求めているかをもっと見始めました。
他のヒント
アセンブリはどこに設置されましたか? GACまたはビンフォルダーにありましたか?ホスティングプロバイダーは設定を変更しましたか? CLRがDLLを検索する場合、構成ファイルでプロービングパスを設定してみてください。
アセンブリをアプリケーションの作業ディレクトリに追加することを覚えていましたか?
シリアナーがそれを見つけてタイプをロードするには、そこにある必要があります。
エクスプローラーで手動でコピーするか、ファイルをワーキングディレクトリにコピーする方法を記述してください。