web-dev-qa-db-fra.com

TypeInitializationException levée pour la classe Program

Mon application Windows Forms fonctionnait auparavant, mais elle a soudainement cessé de fonctionner. Je reçois l'exception suivante:

enter image description here

Avec des détails d'exception comme suit:

System.TypeInitializationException was unhandled
Message: An unhandled exception of type 'System.TypeInitializationException' occurred in mscorlib.dll
Additional information: The type initializer for 'NotificationTester.Program' threw an exception.

Lorsque je clique sur OK, la fenêtre VS affiche les informations suivantes:

enter image description here

La solution fonctionnait bien plus tôt. Je ne comprends pas ce qui ne va pas.

26
Mahesha999

Donc: l'un des initialiseurs de champ, ou le constructeur statique, pour Program - échoue. J'ai trouvé pourquoi. Remarque: InnerException contient l'exception réelle qui a été déclenchée: il suffit de déboguer les initialiseurs de champs et le constructeur statique. Alors regardez dans la classe Program pour:

static SomeType someField = /* some non-trivial expression or method call */ 

ou:

static Program() {
    // stuff
}
39
Marc Gravell

Une autre raison possible: le fichier app.config comporte des sections en double.

11
Stagg

Une raison possible: init un static dictionary avec des clés dupliquées.

8
Robin Qiu

J'ai reçu le même message d'erreur et, dans mon cas, la raison en est que mon programme principal est configuré pour créer une application pour console 32 bits et j'ai ajouté un enregistreur de variable privée qui permet d'accéder à une DLL 64 bits.

public class Program
{
    public static readonly Logger logger = new Logger(typeof(Program));

Après avoir modifié le programme principal pour qu'il soit compilé en 64 bits, le problème est résolu.

5
Charles Chung

Dans mon cas, la raison en était que <configSections> n'était pas le premier dans le fichier config.

Un seul élément <configSections> autorisé par Le fichier de configuration et, si présent, doit être le premier enfant de l'élément <configuration> racine.

Déplacez l'élément configSections vers le haut dans votre fichier de configuration.

J'espère que ça aide à quelqu'un.

3
Vlad Pulichev

J'ai la même erreur avec la cible de plate-forme que n'importe quel processeur et je préfère cocher 32 bits, décocher la dernière solution ayant résolu mon problème.

1
Marçal A. B.

C'est un problème étrange auquel j'ai dû faire face au cours des deux dernières heures. Je l'ai résolu en supprimant la statique des listes que j'ai créées. 

private static readonly List<Person> someList = GlobalConfiguration.Connection.PopulateList();

avec celui-ci:

private readonly List<Person> someList = GlobalConfiguration.Connection.PopulateList();

J'espère que ça aide et que vous n'avez pas à passer deux heures à découvrir le bogue ...

1

Assurez-vous qu'il ne manque aucune DLL de dépendance. Dans mon cas, un DLL que je faisais référence avait une dépendance sur une autre DLL.

Si c'est ce qui s'est passé, examinez la propriété "Exception interne" et vous verrez alors un meilleur message d'erreur. Dans mon cas, il est dit "Impossible de trouver xxx.dll"

1
James Wierzba

Ainsi, si vous n'avez pas reçu un message innerException comme moi, vous pouvez définir un point d'arrêt sur certaines variables statiques, telles que des chaînes que vous avez éventuellement déclarées. Ensuite, vous pouvez déboguer à partir de là avec F10.

1
Worthy7

J'ai le même problème: exécute le programme dans MS VS 2015 et déclenche un message d'exception:

System.TypeInitializationException was unhandled
Message: An unhandled exception of type 'System.TypeInitializationException' occurred in mscorlib.dll
Additional information: Der Typeninitialisierer für "<Module>" hat eine Ausnahme verursacht.

La question d'où provient cette exception? J'ai donc démarré le fichier EXE et affiché la boîte de dialogue du message d'exception. Répondez sur le "mode débogage" avec MS VS afin de devenir plus d'informations affichées sur l'exception.

System.IO.FileNotFoundException was unhandled
    Message: An unhandled exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll
    Additional information: Die Datei oder Assembly "SIC, Version=19.2.6.3, Culture=neutral, PublicKeyToken=**************" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.

Je vais à cette référence et analyse les propriétésProperty: "Copier local" est sur false - car auparavant était installé dans GAC Solution: la propriété "Copier local" définie sur true et construit un nouvel assemblage et fonctionne :-) 

Peut-être que cette information est utile! Alors bonne journée. 

0
Franz

Ce problème pour moi était dû à un fichier utilisateur.config non autorisé créé dans le répertoire AppData\Local [Fabricant] [Nom du produit]. Je ne sais pas comment cela est arrivé là-bas, mais semble être créé de temps en temps.

0
Hadley Pettigrew

Après avoir essayé toutes les réponses énumérées ici, j'en ai une nouvelle:

L'initialiseur de type pour 'MyLibrary' a lancé une exception.

Si vous voyez quelque chose comme ce qui suit ci-dessous dans les exceptions InnerException ..........

"Could not load file or Assembly 'log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a' or one of its dependencies. The system cannot find the file specified.":"log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a"

Dans mon cas, mon répertoire avait la version correcte dll. (log4net.dll dans ce cas).

Et puis ... le problème a été trouvé. Assemblée redirige dans le app.config.

:(

Comme j'avais la bonne version, j'ai supprimé toutes mes redirections. Votre situation peut être différente.

  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="b32731d11ce58905" />
        <codeBase version="1.2.9.0" href="log4netv1.2.9.0\log4net.dll" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" />
        <codeBase version="1.2.10.0" href="log4netv1.2.10.0\log4net.dll" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />
        <codeBase version="1.2.13.0" href="log4netv1.2.13.0\log4net.dll" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
0
granadaCoder