“<Module>”的类型初始化程序在应用程序池超时后引发异常
Posted
技术标签:
【中文标题】“<Module>”的类型初始化程序在应用程序池超时后引发异常【英文标题】:The type initializer for '<Module>' threw an exception after Application pool timeout 【发布时间】:2012-06-27 17:38:17 【问题描述】:应用程序池超时后,我遇到了与外部 DLL 相关的问题。
我正在使用带有 C# Web 应用程序和 .NET 2.0 的 VS2010。此应用程序包括一个外部 DLL(用 C++ 编写)。该 DLL 在项目中被引用,因此在 ObjectBrowser 中我可以看到程序集和所有函数。 该 DLL 需要其他 DLL,我将它们安装在 c:\DLL 目录中,并将此目录添加到 Application_Start() 函数的 EnvironmentVariables“路径”中。
应用程序始终正常工作,除非应用程序超时。 (它有 20 分钟的默认超时)。
在超时后我下次运行应用程序时,我得到“'' 的类型初始化程序引发了异常。”在执行 DLL 组装的新对象的函数中
另一个引发错误的选项是在 Windows 任务管理器/进程中为“w3wp.exe”“结束进程”。结束进程并刷新应用程序后,将显示错误。
谢谢
已编辑:
内部异常:
at <CrtImplementationDetails>.ThrowModuleLoadException(String , Exception )
at <CrtImplementationDetails>.LanguageSupport.Initialize(LanguageSupport* )
at .cctor()The type initializer for '<Module>' threw an exception.
【问题讨论】:
您需要记录 InnerException 感谢 Hans 的快速评论。我包括内部异常 【参考方案1】:在实施删除 cookie 后,我发现其他场景也存在同样的问题。
所以深入挖掘后,我发现真正的问题是我的非托管 DLL 与 IPrincipal 固有的类发生冲突:
public class UserDataThirdParty : IPrincipal
所以我在这些链接中找到了解决方案:
The type initializer for '' threw an exception
和
Error on DataPortal with Loading assembly msvcm80
所以现在我的类的定义是:
public class UserDataThirdParty : MarshalByRefObject, IPrincipal
【讨论】:
该死的。我完全不知道错误来自哪里。这救了我的命。【参考方案2】:问题终于解决了。
问题出在 cookie 上。所以在 Application_Start() 函数中,我删除了这个 cookie:
HttpCookie aCookie = new HttpCookie(FormsAuthentication.FormsCookieName);
aCookie.Expires = DateTime.Now.AddDays(-1);
HttpContext.Current.Response.Cookies.Add(aCookie);
【讨论】:
在这种情况下,您应该将此答案标记为正确 :) 这样它就不会被列为未回答。以上是关于“<Module>”的类型初始化程序在应用程序池超时后引发异常的主要内容,如果未能解决你的问题,请参考以下文章
ImportError : 无法在 linux 上从 <module> 导入名称 <method>