L’initialiseur de type pour ‘MyClass’ a créé une exception

Voici mon code de service Windows. Lorsque je débogue le code, je reçois l’erreur / exception:

L’initialiseur de type pour ‘CSMessageUtility.CSDetails’ a généré une exception.

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using System.IO; using System.Threading; using System.Windows; using System.Windows.Forms; using CSMessageUtility; namespace CS_Data_Trasmmiting_Service { public partial class svcCSWinServ : ServiceBase { //private ssortingng sLogFormat; //private ssortingng sErrorTime; private Thread new_thread; Logger logObject = new Logger(); private bool isenable = true; public svcCSWinServ() { InitializeComponent(); logObject.append("Initialize Service " + DateTime.Now.ToSsortingng(), 70); CheckForAlarms(); } protected override void OnStart(ssortingng[] args) { try { new_thread = new Thread(new ThreadStart(CheckForAlarms)); new_thread.Start(); } catch { } logObject.append("Service Started successfully " + DateTime.Now.ToSsortingng(), 70); } protected override void OnStop() { try { isenable = false; new_thread.Abort(); } catch { } logObject.append("Service Stopped successfully " + DateTime.Now.ToSsortingng(), 70); } void CheckForAlarms() { try { while (true) { //if((DateTime.Now.ToSsortingng("HH:mm") == "18:00")) //{ logObject.append("Start Sending Data " +DateTime.Now.ToSsortingng(), 70); try { //SendAllInfo(); ssortingng str = CSMessageUtility.CSDetails.createDHSMessageFormat(); Thread.Sleep(2000); ssortingng str1 = CSMessageUtility.CSDetails.createEALMessageFormat(); Thread.Sleep(2000); ssortingng str2 = CSMessageUtility.CSDetails.createProductStatusMessageForamt(); Thread.Sleep(2000); ssortingng str3 = CSMessageUtility.CSDetails.createEODMessageFormat(); Thread.Sleep(2000); ssortingng str4 = CSDetails.createProductReceiptEntryatBOSMessageFormat(); Thread.Sleep(2000); ssortingng str5 = CSMessageUtility.CSDetails.createProductSaleMessageFormat(); Thread.Sleep(2000); ssortingng str6 = CSMessageUtility.CSDetails.createTotalizerExceptionMessageFormat(); Thread.Sleep(2000); //CSMessageUtility.CSDetails.createDailyCOtransferMessageFormat(); //Thread.Sleep(2000); } catch (Exception ee) { logObject.append(ee.Message, 70); } logObject.append("Finished Sending Data " +DateTime.Now.ToSsortingng(), 70); Thread.Sleep(3000); //} //Thread.Sleep(20000); } } catch (Exception ex) { logObject.append("Thread Exception: "+ ex.Message + " "+ DateTime.Now.ToSsortingng(), 70); try { new_thread.Abort(); } catch (Exception ex1) { logObject.append("Thread Exception: " +ex1.Message + " " + DateTime.Now.ToSsortingng(), 70); } if (isenable == true) { new_thread = new Thread(new ThreadStart(CheckForAlarms)); new_thread.Start(); } } } } } 

Vérifiez la InnerException de TypeInitializationException ; il est susceptible de contenir des informations sur le problème sous-jacent, et exactement où il s’est produit.

Ce problème peut être causé si une classe essaie d’obtenir la valeur d’une clé dans web.config ou app.config qui n’y est pas.

par exemple
La classe a une variable statique

 private static ssortingng ClientID = System.Configuration.ConfigurationSettings.AppSettings["GoogleCalendarApplicationClientID"].ToSsortingng(); 

Mais web.config ne contient pas la clé GoogleCalendarApplicationClientID

L’erreur sera lancée sur tout appel de fonction statique ou toute création d’instance de classe

The type initializer for 'CSMessageUtility.CSDetails' threw an exception. signifie que le constructeur statique de cette classe a généré une exception. Vous devez donc rechercher soit le constructeur statique de la classe CSDetails, soit l’initialisation de tout membre statique de cette classe.

J’ai rencontré le même problème lorsque j’utilisais des méthodes statiques dans une classe Util, tout comme vous aviez utilisé ‘CSMessageUtility.CSDetails’.

Le problème était que lors de l’initialisation statique de la classe (en utilisant le constructeur statique), le framework initialise également les variables statiques (champs) de la classe. J’avais une variable statique qui essayait de lire les valeurs de app.config, et app.config manquait les parameters respectifs, entraînant ainsi une exception non manipulée. Cela a entraîné l’obtention de la “référence d’object non définie à une instance d’un object”. comme exception interne.

Une autre chose à vérifier lorsque ces erreurs d’initialisation sont émises serait de vérifier si la version .NET cible est installée sur le serveur. Vous pouvez cliquer avec le bouton droit sur le projet et voir quelle version de .NET l’application cible.

J’ai eu le même problème en raison de deux propriétés de configuration identiques (correspondant à app.config):

  [ConfigurationProperty("TransferTimeValidity")] 

Cela peut se produire si vous avez une propriété de dépendance enregistrée avec un type de propriétaire incorrect (argument ownerType).

Notez que SomeOtherControl devrait être YourControl.

 public partial class YourControl { public bool Enabled { get { return (bool)GetValue(EnabledProperty); } set { SetValue(EnabledProperty, value); } } public static readonly DependencyProperty EnabledProperty = DependencyProperty.Register(nameof(Enabled), typeof(bool), typeof(SomeOtherControl), new PropertyMetadata(false)); } 

Un autre scénario qui pourrait causer ceci est lorsque vous avez un morceau de votre code qui appelle:

 ssortingng sParam = **ConfigurationManager.AppSettings["SOME_PARAM"].ToSsortingng(); 

N’oubliez pas que vous devez utiliser le fichier OWSTIMER.EXE.CONFIG pour les parameters du fichier de configuration. J’avais un fichier App.config que j’essayais de lire et je App.config cette erreur car à l’instanciation de mon instance de travail, j’avais une ligne dans mon code faisant référence à Connfiguration.AppSettings & Configuration.ConnectionSsortingngs . Assurez-vous simplement de suivre le chemin:

 C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN 

et placez vos parameters de configuration dans le fichier OWSTIMER.EXE.CONFIG .

Si, pour quelque raison que ce soit, le pouvoir passe ou que l’IDE ​​Visual Studio se bloque, il peut provoquer ce problème dans votre bin / debug bin / release …

Supprimez simplement le contenu et recomstackz (de l’expérience personnelle quand mon orteil a frappé le bouton de réinitialisation!)

J’ai eu une configuration différente mais toujours liée.

Pourrait être une section de configuration personnalisée qui n’a pas été déclarée dans configSections .

Déclarez simplement la section et l’erreur doit se résoudre.

J’ai rencontré ce problème en raison d’une incompatibilité entre les versions d’exécution des assemblys. Veuillez vérifier les versions d’exécution de l’assembly principal (application appelante) et de l’assembly référencé

Dans mon cas, j’ai échoué sur Logger.Create dans une bibliothèque de classes utilisée par mon application principale (console). Le problème était que j’avais oublié d’append une référence à NLog.dll dans mon application de console. L’ajout de la référence avec la version de bibliothèque .NET Framework correcte a résolu le problème.

A eu un cas comme celui-ci dans un projet WPF. Mon problème était sur une ligne qui allait comme ceci:

 DataTable myTable = FillTable(strMySqlQuery); 

FillTable() renvoyé un DataTable basé sur une chaîne de requête SQL. Si je faisais l’option “copie d’exception au presse-papiers”, je pense que c’était le cas, et collé dans le Bloc-notes, je pouvais voir le message. The input is not a valid Base-64 ssortingng as it contains a non-base 64 character .

Mon problème réel n’était pas que la chaîne de requête avait quelque chose qui ne devrait pas être là, comme je le pensais, parce que ssortingng strMySqlQuery = "SELECT * FROM My_Table" était ma chaîne et pensait que cela pouvait être le * ou _ , mais le réel problème était dans FillTable() , où j’ai eu un appel à une autre fonction, GetConnection() qui a retourné un object OracleConnection , afin de l’ouvrir et de récupérer et renvoyer le DataTable. À l’intérieur de GetConnection() j’obtenais les parameters app.config pour ma chaîne de connexion, et l’un d’eux était mal nommé. Donc, l’erreur n’est pas toujours exacte dans toutes les circonstances. Il est préférable de plonger dans la fonction où l’erreur se produit et de déboguer étape par étape et de s’assurer que toutes les valeurs sont remplies avec ce que vous attendez.

J’ai aussi fait face à cette erreur dans deux situations

  1. Lors de la redirection de la couche BAL vers la couche DAL, j’ai fait face à cette exception. Une exception interne dit que “erreur de référence d’object”.

  2. Web.Config clé de fichier Web.Config ne correspond pas.

J’espère que cela sera utile pour résoudre votre problème.

Semblable à ce que Muhammad Iqbal a déclaré. J’étais dans un projet VB.NET (peut-être aussi C #) où j’ai enlevé une paire clé-valeur de App.config qui était référencée par une variable globale au Sub Main() de Module Main Par conséquent, l’exception (et la rupture) se produit dans le Module Main avant le Sub Main() . Si seulement j’avais un sharepoint rupture sur le Dim , mais nous n’intervenons généralement pas sur les variables globales. Peut-être une bonne raison pour ne pas déclarer les globaux faisant référence à App.config? En d’autres termes, cela …

Une exception non gérée de type ‘System.TypeInitializationException’ s’est produite dans le module inconnu. L’initialiseur de type pour ‘Namespace.Main’ a généré une exception.

Est causé par…

App.config

   

Module principal

 Module Main Dim cnnSsortingng As Ssortingng = ConfigurationManager.ConnectionSsortingngs("ConnectionSsortingng1") '< -- BREAK HERE (EXCEPTION) Sub Main() // main code End Main End Module 

Dans mon cas, j’avais une classe d’assistance qui était statique. Dans cette classe, il y avait une méthode pour initialiser une SqlCommand dépendante des variables. Comme on l’appelait à plusieurs endroits, je l’ai déplacé dans la classe d’assistance et j’ai appelé selon les besoins, donc cette méthode était également statique. J’avais maintenant une propriété globale qui était la chaîne de connexion dans Global.asax pointant vers la chaîne de connexion dans web.config. Par intermittence, j’obtiendrais “L’initialiseur de type pour ‘Helper’ a créé une exception”. Si je déplaçais la méthode de la classe Helper vers la classe où elle était appelée, tout allait bien. L’exception interne se plaignait de la nullité de l’object (classe d’assistance). Ce que j’ai fait a été d’append Using Helper à Global.asax et même s’il n’était pas utilisé par Global.asax, cela a résolu le problème.