“<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>

如何在 Node 中导入全局模块?我得到“错误:找不到模块 <module>”?

如何让 Maven 子项目在部署时不寻找父项目?

使用RabbitMQ发送短信

使用RabbitMQ发送短信