web-dev-qa-db-ger.com

Der Typ-Initialisierer für 'MyClass' hat eine Ausnahme ausgelöst

Im Folgenden finden Sie meinen Windows-Dienstcode. Beim Debuggen des Codes erhalte ich den Fehler/die Ausnahme:

Der Typinitialisierer für 'CSMessageUtility.CSDetails' hat eine Ausnahme ausgelöst.

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 string sLogFormat;
        //private string sErrorTime;
        private Thread new_thread;
        Logger logObject = new Logger();
        private bool isenable = true;

        public svcCSWinServ()
        {
            InitializeComponent();
            logObject.append("Initialize Service " + DateTime.Now.ToString(), 70);
            CheckForAlarms();
        }

        protected override void OnStart(string[] args)
        {
            try
            {
                new_thread = new Thread(new ThreadStart(CheckForAlarms));
                new_thread.Start();
            }
            catch
            {
            }

            logObject.append("Service Started successfully " + DateTime.Now.ToString(), 70);
        }

        protected override void OnStop()
        {
            try
            {
                isenable = false;
                new_thread.Abort();
            }
            catch
            {

            }
            logObject.append("Service Stopped successfully " + DateTime.Now.ToString(), 70);
        }


        void CheckForAlarms()
        {
            try
            {
                while (true)
                {
                    //if((DateTime.Now.ToString("HH:mm") == "18:00"))
                    //{

                        logObject.append("Start Sending Data " +DateTime.Now.ToString(), 70);
                        try
                        {
                            //SendAllInfo();
                            string str = CSMessageUtility.CSDetails.createDHSMessageFormat();
                            Thread.Sleep(2000);
                            string str1 = CSMessageUtility.CSDetails.createEALMessageFormat();
                            Thread.Sleep(2000);
                            string str2 = CSMessageUtility.CSDetails.createProductStatusMessageForamt();
                            Thread.Sleep(2000);
                            string str3 = CSMessageUtility.CSDetails.createEODMessageFormat();
                            Thread.Sleep(2000);
                            string str4 = CSDetails.createProductReceiptEntryatBOSMessageFormat();
                            Thread.Sleep(2000);
                            string str5 = CSMessageUtility.CSDetails.createProductSaleMessageFormat();
                            Thread.Sleep(2000);
                            string 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.ToString(), 70);
                        Thread.Sleep(3000);
                    //}
                    //Thread.Sleep(20000);
                }
            }
            catch (Exception ex)
            {
                logObject.append("Thread Exception: "+ ex.Message + " "+ DateTime.Now.ToString(), 70);

                try
                {
                    new_thread.Abort();
                }
                catch (Exception ex1)
                {
                    logObject.append("Thread Exception: " +ex1.Message + " " + DateTime.Now.ToString(), 70);
                }

                if (isenable == true)
                {
                    new_thread = new Thread(new ThreadStart(CheckForAlarms));
                    new_thread.Start();
                }
            }
        }
    }
}
184
gofor.net

Überprüfen Sie die InnerException-Eigenschaft der TypeInitializationException; Es enthält wahrscheinlich Informationen über das zugrunde liegende Problem und wo genau es aufgetreten ist.

308
Fredrik Mörk

Dieses Problem kann auftreten, wenn eine Klasse versucht, den Wert eines Schlüssels inweb.configoderapp.configabzurufen, der dort nicht vorhanden ist.

z.B.
Die Klasse hat eine statische Variable 

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

Die web.config enthält jedoch nicht den Schlüssel GoogleCalendarApplicationClientID

Der Fehler wird ausgegeben bei jedem statischen Funktionsaufruf oder jeder Klasseninstanzerstellung

159

The type initializer for 'CSMessageUtility.CSDetails' threw an exception. bedeutet, dass der statische Konstruktor dieser Klasse eine Exception ausgelöst hat. Sie müssen also entweder im statischen Konstruktor der CSDetails-Klasse oder in der Initialisierung aller statischen Member dieser Klasse nachsehen.

53
Jackson Pope

Ich bin auf dasselbe Problem gestoßen, als ich statische Methoden in einer Util-Klasse verwendet habe, genau wie Sie 'CSMessageUtility.CSDetails' verwendet haben. 

Das Problem war, dass das Framework während der statischen Initialisierung der Klasse (unter Verwendung des statischen Konstruktors) auch die statischen Variablen (Felder) in der Klasse initialisiert. Ich hatte eine statische Variable, die versucht, Werte aus app.config zu lesen, und app.config fehlte die entsprechenden Einstellungen, was zu einer nicht behandelten Ausnahme führte. Dies führte dazu, dass "die Objektreferenz nicht auf eine Instanz eines Objekts festgelegt wurde". als innere Ausnahme.

5
Tharaka

Ich hatte das gleiche Problem, das durch zwei der gleichen Konfigurationseigenschaften verursacht wurde (was mit der app.config übereinstimmt):

    [ConfigurationProperty("TransferTimeValidity")]
3
Tim

Wenn diese Initialisierungsfehler ausgelöst werden, kann außerdem geprüft werden, ob die Ziel-.NET-Version auf dem Server installiert ist. Sie können mit der rechten Maustaste auf das Projekt klicken und sehen, auf welche .NET-Version die Anwendung abzielt.

3
sharad shrestha

Dies kann vorkommen, wenn Sie eine Abhängigkeitseigenschaft haben, die unter dem falschen Besitzertyp registriert ist (ownerType-Argument).

Hinweis SomeOtherControl hätte YourControl sein sollen.

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));
}
2
Adam Caviness

Ein anderes Szenario, das dies verursachen könnte, ist, wenn Sie einen Code-Code haben, der aufruft:

string sParam = **ConfigurationManager.AppSettings["SOME_PARAM"].ToString();

Beachten Sie, dass Sie die OWSTIMER.EXE.CONFIG-Datei für die Einstellungen der Konfigurationsdatei verwenden müssen. Ich hatte eine App.config-Datei, die ich zu lesen versuchte, und diese Fehlermeldung wurde angezeigt, weil ich bei der Instanziierung meiner Jobinstanz eine Zeile in meinem Code hatte, die sich auf Connfiguration.AppSettings & Configuration.ConnectionStrings bezieht. Stellen Sie einfach sicher, dass Sie den Pfad gehen: 

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

und legen Sie Ihre Konfigurationseinstellungen in der OWSTIMER.EXE.CONFIG-Datei ab.

1
lionel jones

Ich bin auf dieses Problem gestoßen, weil die Laufzeitversionen der Assemblys nicht übereinstimmen. Bitte überprüfen Sie die Laufzeitversionen der Hauptassembly (aufrufende Anwendung) und der verwiesenen Assembly

1
ShivanandSK

Wenn aus irgendeinem Grund die Stromversorgung ausfällt oder das Visual Studio IDE abstürzt, kann dies zu Problemen in Ihrem bin/debug bin/release führen ...

Löschen Sie einfach den Inhalt und kompilieren Sie ihn neu (aus eigener Erfahrung, wenn mein Zeh die Reset-Taste drückt!)

1
Dean

Ich hatte eine andere, aber immer noch verwandte Konfiguration.

Möglicherweise handelt es sich um einen benutzerdefinierten Konfigurationsabschnitt, der nicht in configSections deklariert wurde.

Erklären Sie einfach den Abschnitt und der Fehler sollte sich von selbst beheben.

1
TylerBUrquhart

Auch ich habe mich in zwei Situationen mit diesem Fehler konfrontiert 

  1. Bei der Umleitung von der BAL-Schicht zur DAL-Schicht bin ich auf diese Ausnahme gestoßen. Innere Ausnahme sagt, dass "Objektreferenzfehler".

  2. Web.Config-Dateischlüssel stimmt nicht überein.

Hoffen Sie, dass dies nützlich ist, um Ihr Problem zu lösen.

0
Gopi P

Meine Antwort bezieht sich auch auf den Konfigurationsabschnitt. Wenn Sie Werte aus der Konfigurationsdatei in der statischen Klasse von C # oder Module.VB von VB zuweisen, wird dieser Fehler zur Laufzeit angezeigt.

add key = "LogPath" value = "~/Error_Log /"

Die Verwendung des Schrägstrichs "Forward" in Web.Config führt auch zur Laufzeit zu diesem Fehler. Ich habe dieses Problem gerade mit BackSlash gelöst

add key = "LogPath" value = "~\Error_Log \"

0
Mohamed Riyas

Hatte einen solchen Fall in einem WPF-Projekt. Mein Problem war auf einer Linie, die so lief:

DataTable myTable = FillTable(strMySqlQuery);

Dabei gab FillTable() eine DataTable basierend auf einer SQL-Abfragezeichenfolge zurück. Wenn ich die Option "Ausnahme in die Zwischenablage kopieren" verwendet habe, denke ich, und wenn sie in den Editor eingefügt wurde, konnte ich die Nachricht sehen. Für mich war es The input is not a valid Base-64 string as it contains a non-base 64 character

Mein eigentliches Problem bestand nicht darin, dass die Abfragezeichenfolge etwas hatte, das nicht so sein sollte, wie ich dachte, denn string strMySqlQuery = "SELECT * FROM My_Table" war meine Zeichenfolge und dachte, es könnte der * oder _ sein, aber das eigentliche Problem bestand in FillTable() , wo ich eine andere Funktion aufgerufen hatte, GetConnection(), die ein OracleConnection-Objekt zurückgegeben hat, um es zu öffnen und die DataTable abzurufen und zurückzugeben. In GetConnection() habe ich die app.config-Parameter für meine Verbindungszeichenfolge abgerufen, und ich hatte einen von ihnen falsch benannt. Daher wurde ein Nullwert für das Kennwort des Dienstkontos festgelegt, und es wurde keine DB-Verbindung hergestellt. Daher ist der Fehler nicht immer unter allen Umständen genau richtig. Am besten tauchen Sie in die Funktion ein, in der der Fehler vorliegt, und führen Sie Schritt für Schritt ein Debugging durch, um sicherzustellen, dass alle Werte mit dem erwarteten Wert gefüllt werden.

0
vapcguy

In meinem Fall hatte ich einen Fehler in Logger.Create in einer Klassenbibliothek, die von meiner Haupt- (Konsolen-) App verwendet wurde. Das Problem war, dass ich vergessen hatte, in meiner Konsolen-App einen Verweis auf NLog.dll hinzuzufügen. Durch Hinzufügen des Verweises mit der korrekten Version der .NET Framework-Bibliothek wurde das Problem behoben.

0
live-love

Ähnlich wie bei Muhammad Iqbal. Ich war in einem VB.NET-Projekt (möglicherweise auch C #), bei dem ich ein Schlüsselwertpaar aus dem App.config entfernte, das von einer Variablen global auf die Sub Main() von Module Main referenziert wurde. Daher tritt die Ausnahme (und die Unterbrechung) in Module Main vor der Sub Main() auf. Wenn ich nur einen Haltepunkt in der Dim gehabt hätte, aber normalerweise nicht bei globalen Variablen. Vielleicht ein guter Grund, Globals nicht auf App.config zu verweisen? Mit anderen Worten, das ...

Eine nicht behandelte Ausnahme des Typs 'System.TypeInitializationException' ist in Unknown Module ..__ aufgetreten. Die Typinitialisierung für 'Namespace.Main' hat eine Ausnahme ausgelöst.

Wurde ausgelöst durch...

App.config

<connectionStrings>
    <!--<add name="ConnectionString1" connectionString="..." />-->

Hauptmodul

Module Main
    Dim cnnString As String = ConfigurationManager.ConnectionStrings("ConnectionString1")  '<-- BREAK HERE (EXCEPTION)

    Sub Main()

        // main code

    End Main
End Module
0
Adam Cox

In meinem Fall hatte ich eine Hilfsklasse, die statisch war. In dieser Klasse befand sich eine Methode, um einen SqlCommand abhängig von Variablen zu initialisieren. Da dies an mehreren Stellen aufgerufen wurde, habe ich es in die Helper-Klasse verschoben und nach Bedarf aufgerufen, sodass diese Methode auch statisch war. Jetzt hatte ich eine globale Eigenschaft, die die Verbindungszeichenfolge in Global.asax war und auf die Verbindungszeichenfolge in web.config verweist. Zeitweise würde ich bekommen "Der Typ-Initialisierer für 'Helper' hat eine Ausnahme ausgelöst". Wenn ich die Methode von der Helper-Klasse in die Klasse verschoben habe, in der sie von allen aufgerufen wurde, war das gut. Die innere Ausnahme beklagte, dass das Objekt null ist (Helfer-Klasse). Was ich getan habe, war das Hinzufügen von Using Helper zu Global.asax. Auch wenn es von Global.asax nicht verwendet wurde, wurde das Problem gelöst.

0
Ray

Ich wickelte meine abgestürzte Zeile in einen Try-Catch-Block ein, druckte die Ausnahme aus und brach sofort nach dem Ausdruck ab. Die abgebildeten Ausnahmeinformationen enthielten eine Stapelablaufverfolgung, die auf die Datei und die Codezeile verwies, die den Fehler verursachten.

 enter image description here

System.TypeInitializationException: The type initializer for 'Blah.blah.blah' threw an exception. 
---> System.NullReferenceException: Object reference not set to an instance of an object.
   at Some.Faulty.Software..cctor() in C:\Projects\My.Faulty.File.cs:line 56
   --- End of inner exception stack trace ---
   at Blah.blah.blah(Blah.blah.blah)
   at TestApplication.Program.Main(String[] args) 
   in C:\Projects\Blah.blah.blah\Program.cs:line 29 Exception caught.
0
user3070485

Wie der Fehler besagt, ist die Initialisierung des Typs/der Klasse fehlgeschlagen. Dies tritt normalerweise auf, wenn im Konstruktor der Klasse eine Ausnahme vorliegt. Der häufigste Grund ist, dass Sie im Konstruktor einen Wert zuweisen, der aus einer Konfigurationsdatei gelesen wird, und in der Konfigurationsdatei fehlen diese Werte.

0
zak

Irgendwie hat das Beenden von Visual Studio und das erneute Öffnen das Problem für mich gelöst.

0
Kirsten Greed