'MyClass' के लिए टाइप इनिशियलाइज़र ने एक अपवाद को फेंक दिया


217

निम्नलिखित मेरा विंडोज सेवा कोड है। जब मैं कोड डिबग कर रहा हूं, मुझे त्रुटि / अपवाद मिल रहा है:

'CSMessageUtility.CSDetails' के लिए टाइप इनिशियलाइज़र ने एक अपवाद फेंक दिया।

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();
                }
            }
        }
    }
}

5
स्थैतिक सदस्यों की प्रारंभिक जांच करें।
रोबिनो

जवाबों:


350

की InnerExceptionसंपत्ति की जाँच करें TypeInitializationException; इसमें अंतर्निहित समस्या के बारे में जानकारी होने की संभावना है, और वास्तव में यह कहां हुआ है।


4
धन्यवाद फ्रेड्रिक मोर्क मुझे आंतरिक अपवाद मिला "वस्तु संदर्भ वस्तु के उदाहरण के लिए सेट नहीं है।" मैं इसके लिए जाँच कर रहा हूँ
gofor.net

2
@ gofor.net: @ जेकसन पोप बताते हैं; आपके कोड का दिलचस्प हिस्सा static CSDetailsकक्षा में विधि है CSMessageUtility.CSDetails(और किसी भी तरीके से इसे कॉल किया जा सकता है)। यदि आपको समस्या अपने आप नहीं मिलती है, तो उस कोड के साथ प्रश्न को अपडेट करें।
फ्रेड्रिक मोर्क

वास्तव में CSMessageUtility dll संदर्भ है जिसका मैं उपयोग कर रहा हूं और इसमें कई मेथोड शामिल हैं। लेकिन जब मैं उन तरीकों को मैन्युअल रूप से जांचता हूं तो मुझे कोई त्रुटि नहीं मिली। यह पूरी तरह से काम करता है
gofor.net

2
अपवाद हमेशा मान्य नहीं होता है या सही समस्या की ओर इशारा करता है। मेरे लिए, इसने मुझे यह बताने का प्रयास किया The input is not a valid Base-64 string as it contains a non-base 64 characterकि एक फ़ंक्शन डेटाटेबल ऑब्जेक्ट पर क्या लौट रहा था, लेकिन मेरे लिए, वास्तव में एक अंतर्निहित मुद्दा था जहां मैं app.configगलत नाम से एक पैरामीटर को बुला रहा था , इसलिए एक चर मैं अपने कनेक्शन को बनाने के लिए उपयोग कर रहा था अशक्त था। इसलिए यह OracleConnectionDataTable को वापस करने के लिए उस फ़ंक्शन को नहीं खोल सकता है । सबसे अच्छी सलाह यह है कि त्रुटि को वापस लाने वाले अंतर्निहित फ़ंक्शन में गोता लगाएँ।
vapcguy

186

यदि कोई वर्ग web.config या app.config में कुंजी का मान प्राप्त करने का प्रयास करता है, तो यह समस्या हो सकती है, जो वहां मौजूद नहीं है।

उदा
। कक्षा में एक स्थिर चर है

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

लेकिन web.config में GoogleCalendarApplicationClientIDकुंजी नहीं है

त्रुटि को किसी भी स्थिर फ़ंक्शन कॉल या किसी भी क्लास इंस्टेंस निर्माण पर फेंक दिया जाएगा


24
यार मैं कभी भी ऐसा नहीं कर पाया। मैं प्वाइंट ब्रेक पर बहुत अधिक भरोसा कर रहा था और अफसोस, उन्होंने मुझे बचाया नहीं होगा। धन्यवाद दोस्त! +1
लुकास

7
मैं सहमत हूँ । । । मेरा अभी वही हश्र हुआ था। मेरे बाल खींच रहा था, यह पता लगाने की कोशिश कर रहा था। बहुत धन्यवाद!
dscarr

3
यह मेरे मामले में कनेक्शन स्ट्रिंग था।
मुसाखिर सैय्यद

1
तुम रॉक यार! आप एक रक्षक हैं! अनुपलब्ध कॉन्फ़िगरेशन प्रविष्टि के बिना संदर्भित प्रोजेक्ट डिबगिंग (में कदम रखना) भी नहीं था। उस कोड में बिना रुके कॉन्फ़िगर के साथ मुद्दे से संबंधित कोई सुराग नहीं था। 2 दिन बर्बाद करने के बाद आपने मेरा सप्ताह बचाया: P!
प्रमोद शर्मा

1
@MuhammadWaqasIqbal अंतिम बोल्ड वाक्य कुंजी है !!! कोई भी फ़ंक्शन जो ClientIDइस उदाहरण में उपयोग करता है , उसमें यह त्रुटि होगी। महान पद।
vapcguy

57

The type initializer for 'CSMessageUtility.CSDetails' threw an exception. इसका मतलब यह है कि उस वर्ग के स्थिर निर्माता ने एक अपवाद को फेंक दिया - इसलिए आपको या तो CSDetails वर्ग के स्थिर निर्माता में देखने की जरूरत है, या उस वर्ग के किसी भी स्थिर सदस्य के आरंभ में।


1
यकीन है कि पर्याप्त। मैं log4net लकड़हारा का एक स्थिर उदाहरण बना रहा था जो समस्या पैदा कर रहा था। समस्या यह थी कि उस प्रोजेक्ट में log4net असेंबली का संस्करण अन्य प्रोजेक्ट्स में संस्करण से मेल नहीं खाता था (जो कि मैंने विशेष रूप से
शिवन को

1
मैं एक ही मुद्दा NLog का उपयोग कर रहा था। मैं स्टैटिक कंस्ट्रक्टर्स में अपने लॉगर्स को इनिशियलाइज़ करने की कोशिश करता हूं और विभिन्न प्रोजेक्ट्स में संस्करणों के बीच बेमेल की वजह से यह समस्या पैदा हुई। हर जगह एक ही संस्करण का उपयोग करने से समस्या हल हो गई।
शेल्बीपेरेरा

5

मैं उसी समस्या में भाग गया, जब मैं एक Util क्लास में स्टैटिक तरीकों का इस्तेमाल कर रहा था, जैसे आपने 'CSMessageUtility.CSDetails' का इस्तेमाल किया था।

समस्या यह थी कि वर्ग के स्थिर आरंभीकरण (स्थैतिक निर्माणकर्ता का उपयोग करके) के दौरान, फ्रेमवर्क वर्ग में स्थैतिक चर (फ़ील्ड) को भी आरंभ करता है। मेरे पास एक स्थिर वैरिएबल है जो app.config से मूल्यों को पढ़ने का प्रयास करता है, और app.config संबंधित सेटिंग्स को याद कर रहा था, इस प्रकार एक अप्रयुक्त अपवाद के परिणामस्वरूप। इसके परिणामस्वरूप "ऑब्जेक्ट का संदर्भ ऑब्जेक्ट के इंस्टेंस पर सेट नहीं होता है।" आंतरिक अपवाद के रूप में।


3

जाँच करने के लिए एक और बात जब इन इनिशियलाइज़ एरर को फेंका जाता है, तो यह जाँचना होगा कि टारगेट .NET वर्जन सर्वर पर इन्स्टाल है या नहीं। आप प्रोजेक्ट को राइट क्लिक कर सकते हैं और देख सकते हैं कि एप्लिकेशन किस .NET संस्करण को लक्षित कर रहा है।


3

मैं एक ही विन्यास गुण (जो app.config से मेल खाता है) के दो के कारण एक ही समस्या थी:)

    [ConfigurationProperty("TransferTimeValidity")]

2

एक और परिदृश्य जो इसका कारण हो सकता है जब आपके पास अपने कोड का एक टुकड़ा होता है जो कॉल करता है:

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

ध्यान रखें कि आपको OWSTIMER.EXE.CONFIGकॉन्फ़िगरेशन फ़ाइल सेटिंग्स के लिए फ़ाइल का उपयोग करना होगा। मेरे पास एक App.configफ़ाइल थी जिसे मैं पढ़ने की कोशिश कर रहा था और मुझे यह त्रुटि हो रही थी क्योंकि मेरे नौकरी के उदाहरण पर पलटने के बाद, मेरे पास मेरे कोड में एक पंक्ति थी जो Connfiguration.AppSettings& का उल्लेख कर रही थी Configuration.ConnectionStrings। बस यह सुनिश्चित करें कि आप रास्ते पर जाएं:

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

और अपनी कॉन्फ़िगरेशन सेटिंग्स को OWSTIMER.EXE.CONFIGफ़ाइल में रखें।


2

यह तब हो सकता है यदि आपके पास एक निर्भरता गुण है जो गलत स्वामी प्रकार (स्वामी टाइप तर्क) में पंजीकृत है।

सूचना SomeOtherControl 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));
}

1

अगर किसी भी कारण से बिजली चली जाती है या विजुअल स्टूडियो आईडीई क्रैश हो जाता है तो यह आपके बिन / डिबग बिन / रिलीज के अंदर इस समस्या का कारण बन सकता है ...

बस सामग्री को हटा दें और फिर से खोलें (व्यक्तिगत अनुभव से जब मेरे पैर की अंगुली रीसेट बटन को मारा!)


1

मेरे पास एक अलग लेकिन अभी भी संबंधित कॉन्फ़िगरेशन था।

एक कस्टम विन्यास खंड है कि में घोषित नहीं किया गया हो सकता है configSections

बस अनुभाग की घोषणा करें और त्रुटि को स्वयं हल करना चाहिए।


1

असेंबली के रनटाइम संस्करणों के बीच बेमेल के कारण मुझे इस मुद्दे का सामना करना पड़ा। कृपया मुख्य असेंबली के रनटाइम संस्करणों (कॉलिंग एप्लिकेशन) और संदर्भित विधानसभा को सत्यापित करें


1

जैसा कि त्रुटि कहती है कि टाइप / क्लास का आरंभन विफल रहा। यह आमतौर पर तब होता है जब कक्षा के निर्माता में कुछ अपवाद होता है। अधिकांश सामान्य कारण यह है कि आप कन्फ़िगर फ़ाइल में कुछ मान एक फ़ाइल से पढ़ रहे हैं और कॉन्फ़िगरेशन फ़ाइल उन मानों को याद कर रही है।


0

मेरे मामले में मेरे पास यह लॉग ऑन करने में विफल रहा था। एक क्लास लाइब्रेरी के अंदर बनाएँ जो मेरे मुख्य (कंसोल) ऐप द्वारा उपयोग किया जा रहा था। समस्या यह थी कि मैं अपने कंसोल ऐप में NLog.dll का संदर्भ जोड़ना भूल गया था। सही .NET फ्रेमवर्क लाइब्रेरी संस्करण के साथ संदर्भ जोड़ना समस्या को ठीक करता है।


0

एक WPF परियोजना में इस तरह का मामला था। मेरा मुद्दा एक लाइन पर था जो इस प्रकार थी:

DataTable myTable = FillTable(strMySqlQuery);

जहाँ FillTable()SQL क्वेरी स्ट्रिंग के आधार पर एक DataTable लौटाया। अगर मैंने "क्लिपबोर्ड पर कॉपी अपवाद" विकल्प किया, तो मुझे लगता है कि यह था, और नोटपैड में चिपकाया गया, मैं संदेश देख सकता था। मेरे लिए, यह थाThe input is not a valid Base-64 string as it contains a non-base 64 character

मेरी वास्तविक समस्या यह नहीं थी कि क्वेरी स्ट्रिंग में कुछ ऐसा होना चाहिए, जैसा मैं सोच रहा था, क्योंकि string strMySqlQuery = "SELECT * FROM My_Table"मेरी स्ट्रिंग थी और सोचा था कि यह *या हो सकता है _, लेकिन वास्तविक समस्या थी FillTable(), जहां मुझे दूसरे को कॉल करना था फ़ंक्शन, GetConnection()जो किसी OracleConnectionऑब्जेक्ट को लौटाता है, इसे खोलने और डेटाटेबल को पुनः प्राप्त करने और वापस करने के लिए। अंदर GetConnection()मुझे app.configमेरे कनेक्शन स्ट्रिंग के लिए पैरामीटर मिल रहे थे , और मेरे पास उनमें से एक गलत नाम था, इसलिए यह सेवा खाते के पासवर्ड के लिए एक अशक्त मान सेट कर रहा था और डीबी कनेक्शन नहीं बना रहा था। तो यह हमेशा नहीं होता है जहां त्रुटि सभी परिस्थितियों के लिए बिल्कुल सही है। उस फ़ंक्शन में गोता लगाने के लिए सर्वश्रेष्ठ जहां त्रुटि है और चरण-दर-चरण डिबग करें और सुनिश्चित करें कि सभी मान आपकी अपेक्षाओं से भरे हुए हैं।


0

मुझे भी दो स्थिति में इस त्रुटि का सामना करना पड़ा

  1. BAL लेयर से DAL लेयर पर रीडायरेक्शन करते समय मुझे इस अपवाद का सामना करना पड़ा। आंतरिक अपवाद कहता है कि "ऑब्जेक्ट संदर्भ त्रुटि"।

  2. Web.Config फ़ाइल कुंजी मेल नहीं खाती।

आशा है कि यह आपकी समस्या को हल करने के लिए उपयोगी है।


0

क्या मुहम्मद इकबाल ने कहा करने के लिए इसी तरह की है .. मैं एक VB.NET में था परियोजना मैं कहाँ से एक कुंजी-मान पेयर को दूर किया (यह भी सी # हो सकता है) App.configके लिए जो संदर्भित किया गया था एक चर वैश्विक द्वारा Sub Main()की Module Main। इसलिए, अपवाद (और विराम) से Module Mainपहले होता है Sub Main()। यदि केवल मेरे पास ही ब्रेक-पॉइंट था Dim, लेकिन हम आमतौर पर वैश्विक चर पर नहीं टूटते। शायद App.config को संदर्भित ग्लोबल्स घोषित नहीं करने का एक अच्छा कारण है? दूसरे शब्दों में, यह ...

अज्ञात मॉड्यूल में 'System.TypeInitializationException' प्रकार का एक अपवाद नहीं है। 'Namespace.Main' के लिए टाइप इनिशियलाइज़र ने एक अपवाद को फेंक दिया।

के कारण है...

app.config

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

मुख्य मॉड्यूल

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

    Sub Main()

        // main code

    End Main
End Module

0

मेरे मामले में, मेरे पास एक सहायक वर्ग था जो स्थिर था। उस वर्ग में चर पर निर्भर एक SqlCommand को इनिशियलाइज़ करने की विधि थी। जैसा कि यह कई स्थानों पर बुलाया जा रहा था मैंने इसे सहायक वर्ग में स्थानांतरित किया और आवश्यकतानुसार बुलाया, इसलिए यह विधि भी स्थिर थी। अब मेरे पास एक वैश्विक संपत्ति थी जो कि web.config में कनेक्शन स्ट्रिंग की ओर इशारा करते हुए Global.asax में कनेक्शन स्ट्रिंग थी। आंतरायिक रूप से मुझे "हेल्पर 'के लिए टाइप इनिशियलाइज़र मिलेगा"। अगर मैंने हेल्पर क्लास से उस वर्ग में विधि को स्थानांतरित किया जहां इसे सभी से बुलाया जा रहा था तो अच्छा था। आंतरिक अपवाद ने ऑब्जेक्ट के अशक्त होने की शिकायत की (हेल्पर वर्ग)। मैंने हेल्पर का उपयोग करके Global.asax में जोड़ दिया था और भले ही Global.asax द्वारा इसका उपयोग नहीं किया जा रहा था, लेकिन इससे समस्या हल हो गई।


0

मेरा उत्तर भी विन्यास अनुभाग से संबंधित है। यदि आप VB के C # या Module.VB की स्थिर कक्षा में कॉन्फ़िग फ़ाइल से मान असाइन करते हैं, तो आपको यह त्रुटि रन टाइम पर मिलेगी।

कुंजी जोड़ें = "लॉगपाथ" मान = "~ / Error_Log /"

Web.Config में फॉरवर्ड स्लैश का उपयोग करने से रन टाइम पर भी यह त्रुटि होती है। मैंने सिर्फ बैकस्लैश लगाकर इस मुद्दे को हल किया

कुंजी = "लॉगपाथ" मान जोड़ें = "~ \ Error_Log \"


0

मैंने अपनी लाइन को लपेटा जो कि ट्राइ-कैच ब्लॉक में दुर्घटनाग्रस्त हो गया, अपवाद को मुद्रित किया, और प्रिंट होने के तुरंत बाद इसे तोड़ दिया। दिखाई गई अपवाद जानकारी में एक स्टैक ट्रेस था जिसने मुझे फ़ाइल और कोड की लाइन की ओर इशारा किया जिससे गलती हुई।

यहां छवि विवरण दर्ज करें

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

किसी तरह विजुअल स्टूडियो से बाहर निकलना और इसे फिर से खोलना मेरे लिए यह हल हो गया।


0

शब्दकोश कुंजी अद्वितीय होना चाहिए!

मेरे मामले में, मैं एक शब्दकोश का उपयोग कर रहा था, और मैंने पाया कि इसमें दो आइटम गलती से एक ही कुंजी हैं।

Dictionary<string, string> myDictionary = new Dictionary<string, string>() {
            {"KEY1", "V1"},
            {"KEY1", "V2" },
            {"KEY3", "V3"},
        };

0

उल्लेखनीय: मेरे पास अपने समाधान में कई परियोजनाएं थीं और मैं संदर्भ / नुगेट पुस्तकालय जोड़ना भूल गया। जब मैंने स्टैटिक क्लास में एक विधि चलाई, जिसमें दिए गए पुस्तकालयों का उपयोग किया गया, तो यह उल्लिखित अपवाद को फेंक दिया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.