Comment déboguer “L’initialiseur de type pour ‘ma classe’ a lancé une exception”

Je reçois une exception: l’ The type initializer for 'my class' threw an exception. dans mon navigateur après avoir exécuté mon application Web. Étant donné que cela semble être un message d’erreur généré à partir de la vue (.aspx), il est impossible que je voie la trace de la stack ou un journal de la source de cette erreur.

J’ai lu un peu sur le net et une solution au débogage consiste à lancer une TypeInitializationException , puis à examiner l’exception interne pour déterminer ce qui n’allait pas. Comment est-ce que je peux faire ceci quand je ne sais pas où entourer le code avec un try / catch?

Cela peut être dû à un mauvais constructeur statique ou à une mauvaise initialisation en ligne de propriétés / champs statiques. Par exemple:

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

Enfin, j’ai trouvé la raison de ce problème en raison des parameters AppConfig de mon projet. Oui, j’ai deux projets C #, Project1 et Project2 .

Project1 est contient la classe statique MyDetails

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

J’ai les parameters suivants de appConfig dans Project1

    

La fonction MyDetails.GetData () est appelée à partir de Project2 qui est le projet en cours de débogage. Puisque Project2 est le projet cible, la ligne ConfigurationManager.AppSettings [“LogLevel”] essaiera de lire le paramètre LogLevel à partir de Project2 . mais le paramètre LogLevel est uniquement disponible dans Project1 . donc, nous devons append appsettings dans Project2 .

Le problème L’initialiseur de type pour une exception lancée a été résolu après l’ajout des parameters d’application suivants dans appConfig de Project2 ,

    

Cette exception est levée lorsque le constructeur statique de “ma classe” se bloque. S’il vous plaît mettez votre point d’arrêt là-bas.

Il y a quelque chose qui, lorsqu’il est erroné dans votre constructeur statique de la classe, et au lieu de lancer cette erreur, le CLR TypeInitializationException .