如何调试"我的类的类型初始化器"引发异常"

JF *_*ieu 7 c# asp.net exception-handling exception

我得到了例外:The type initializer for 'my class' threw an exception.运行我的Web应用程序后在我的浏览器中.由于这似乎是从视图(.aspx)生成的错误消息,因此我无法看到堆栈跟踪或此错误源的任何日志.

我已经在网上阅读了一下,调试的一个解决方案是抛出一个TypeInitializationException然后查看内部异常以找出错误.当我不知道使用try/catch包围代码的位置时,我该怎么做?

spe*_*der 11

这可能是由错误的静态构造函数或静态属性/字段的错误内联初始化引起的.例如:

class A
{
    static A()
    {
        //buggy code here
    }
    static SomeField f = new ThisClassThrowsWhenConstructed(); // <-- or here
}
Run Code Online (Sandbox Code Playgroud)


kom*_*bsh 5

最后我发现这个问题的原因是我的项目的 AppConfig 设置。是的,我有两个 C# 项目Project1Project2

Project1包含静态类MyDetails

public static MyDetails
{
  public static int _LogLevel = Int32.Parse(ConfigurationManager.AppSettings["LogLevel"])

  public static GetData()
   {
     ----code----
     ----code----
   }
}
Run Code Online (Sandbox Code Playgroud)

我在 Project1 中有以下 appConfig 设置

<appSettings>
    <add key="LogLevel" value="5"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)

函数MyDetails.GetData()正在从Project2调用,这是我现在正在调试的项目。由于Project2 是目标项目,行ConfigurationManager.AppSettings["LogLevel"]将尝试从Project2读取设置 LogLevel 。但LogLevel设置仅在Project1 中可用。所以,我们需要在Project2 中添加 appsettings 。

Project2 的appConfig 中添加以下 appsettings 后,The type initializer for throw an exception 问题已解决,

<appSettings>
    <add key="LogLevel" value="5"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)