无法找到装配 - 无法追踪错误

时间:2011-12-01 15:37:18

标签: asp.net .net exception-handling .net-assembly solrnet

我有一个在IIS 7.0的集成v4.0应用程序池中运行的网站。 从今天开始,我在Windows事件日志中得到以下异常。该网站在线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)
<德尔> 我将此故障与一个资源文件夹中的新文件夹和新图像文件的大量创建相关联,该文件夹位于与网站相同的文件夹中。 <德尔> 我知道ASP.NET会在删除文件夹时重新启动应用程序池。是否有可能因为创建了这个新资源文件夹而发生了某些事情,并且ASP.NET重新加载程序集?
  

Mauricio Scheffer说:@Dorin:那么真正的问题是循环依赖。我建议发布一个新的问题。

我解决了循环依赖的问题,并且我在Windows事件日志中一直收到同样的错误。

首先我得到Unable to find assembly 'SolrNet, Version=0.4.0.1001, Culture=neutral, PublicKeyToken=bc21753e8aa334cb',然后网络应用程序重新启动。

在我在Windows日志中获得异常之前3到10秒,我在实体框架引发的我的站点日志文件中发现了一个expcetion,因为我试图插入一个与现有主键相同的主键。该异常未在代码中处理,但由于CustomErrors设置

而被asp.net处理
<customErrors mode="On" defaultRedirect="/Error.aspx" redirectMode="ResponseRewrite">
    <error statusCode="404" redirect="/Error.aspx"/>
</customErrors>

这可能与Windows日志文件中的错误有关吗?

3 个答案:

答案 0 :(得分:7)

我在博客文章中发现了这个声明,除了这个主题之外,还谈到了why an application pool might go down

  

“与请求无关的线程中的未处理异常将会发生   记下这个过程。即使您有处理程序设置,也会发生这种情况   通过Application_Error方法。“

对于某些类型的请求,我从请求线程创建了8个新线程,以便同时查询我的SOLR的8个不同核心。在其中一个核心中,我得到了一个异常,我没有在该线程中处理,这让我陷入了发布的问题。

我希望如果他们遇到类似的错误,这可以帮助其他人。非常感谢你们的帮助。由于你的答案我改进了我的代码,我发现并修复了与问题无关的其他错误。此外,我开始更多地了解ASP.NET如何加载程序集,这是一个很大的帮助。

答案 1 :(得分:0)

组装安装的地方?在GAC或bin文件夹中? 主机提供商是否更改了其设置? 尝试在配置文件中设置探测路径,其中CLR搜索dll。

答案 2 :(得分:0)

您是否记得将程序集添加到应用程序的工作目录中?

必须存在才能让序列化程序找到它并加载类型。

只需在资源管理器中手动复制它,或者编写一些将文件复制到工作目录的方法。