Frage Wie zu debuggen "Der Typinitialisierer für 'meine Klasse' hat eine Ausnahme ausgelöst"


Ich bekomme die Ausnahme: The type initializer for 'my class' threw an exception. in meinem Browser nach dem Ausführen meiner Webanwendung. Da dies eine Fehlermeldung zu sein scheint, die aus der Ansicht (.aspx) generiert wird, gibt es keine Möglichkeit, die Stack-Ablaufverfolgung oder ein Protokoll für die Quelle dieses Fehlers zu sehen.

Ich habe ein bisschen im Netz gelesen und eine Lösung zum Debuggen ist es, eine zu werfen TypeInitializationException und dann die innere Ausnahme betrachten, um herauszufinden, was falsch war. Wie kann ich das tun, wenn ich nicht weiß, wo Code mit einem Versuch / Catch umgeben werden soll?


5
2017-09-06 17:48


Ursprung


Antworten:


Dies kann durch einen fehlerhaften statischen Konstruktor oder durch eine fehlerhafte Inline-Initialisierung statischer Eigenschaften / Felder verursacht werden. Zum Beispiel:

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

11
2017-09-06 17:54



Letztendlich fand ich den Grund für dieses Problem in den AppConfig-Einstellungen meines Projekts. Ja, ich habe zwei C # -Projekte, Projekt 1 und Projekt2.

Projekt 1 enthält die statische Klasse Meine Details

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

  public static GetData()
   {
     ----code----
     ----code----
   }
}

Ich habe folgende Einstellungen für AppConfig in Project1

<appSettings>
    <add key="LogLevel" value="5"/>
</appSettings>

Die Funktion MeineDetails.GetData () wird von genannt Projekt2 Welches ist das Projekt, das ich jetzt debugge. Schon seit Projekt2  ist das Zielprojekt, die Linie ConfigurationManager.AppSettings ["LogLevel"] wird versuchen, die Einstellung LogLevel aus zu lesen Projekt2. aber LogLevel Einstellung ist nur verfügbar in Projekt 1. Also müssen wir Appsettings hinzufügen Projekt2.

Das Problem Der Typinitialisierer für das Auslösen einer Ausnahme wurde nach dem Hinzufügen der folgenden Appsettings in appConfig von behoben Projekt2,

<appSettings>
    <add key="LogLevel" value="5"/>
</appSettings>

2
2017-10-26 03:52



Diese Ausnahme wird ausgelöst, wenn der statische Konstruktor von 'Meine Klasse' abstürzt. Bitte setzen Sie Ihren Haltepunkt dorthin.


1
2017-09-06 17:50



Es gibt etwas, das falsch in Ihrem statischen Konstruktor der Klasse ist, und anstatt diesen Fehler zu werfen, der CLR wird werfen TypeInitializationException.


0
2017-09-06 17:50