'Sınıfım' için tür başlatıcı bir istisna attı


218

Windows servis kodum aşağıdadır. Kod hata ayıklama zaman, hata / istisna alıyorum:

'CSMessageUtility.CSDetails' için tür başlatıcı bir istisna attı.

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
Statik elemanların başlatılmasını kontrol edin.
Robino

Yanıtlar:


351

Kontrol InnerExceptionözelliği TypeInitializationException; altta yatan sorun ve tam olarak nerede oluştuğu hakkında bilgi içermesi muhtemeldir.


4
Teşekkürler Fredrik Mörk "Nesne başvurusu bir nesnenin örneğine ayarlanmadı" iç istisnasını aldım. Ben kontrol
ediyorum

2
@ gofor.net: @Jackson Pope'nin işaret ettiği gibi; kodunuzun ilginç kısmı static CSDetailssınıftaki yöntemdir CSMessageUtility.CSDetails(ve çağırabileceği yöntemler). Sorunu kendi başınıza bulamazsanız, soruyu bu kodla güncelleyin.
Fredrik Mörk

aslında CSMessageUtility kullanıyorum dll başvuru ve bu çeşitli yöntemleri içerir. ancak bu yöntemleri manuel olarak kontrol ettiğimde herhangi bir hata almadım. mükemmel çalışıyor
gofor.net

2
İstisna her zaman geçerli değildir veya doğru konuyu işaret eder. Benim için, The input is not a valid Base-64 string as it contains a non-base 64 characterbir işlevin bir DataTable nesnesine ne döndürdüğünü anlatmaya çalıştı , ama benim için, aslında app.configyanlış adla bir parametre çağırdığım temel bir sorun vardı , bu yüzden bağlantılarımı oluşturmak için kullandığım bir değişken boştu. Bu nedenle OracleConnection, DataTable'ı döndürmek için o işlevde açılamadı . En iyi tavsiye, hatayı döndüren temel fonksiyona dalmaktır.
vapcguy

186

Bir sınıf, web.config veya app.config dosyasında bulunmayan bir anahtarın değerini almaya çalışırsa bu sorun oluşabilir .

örneğin
, sınıfın statik bir değişkeni vardır

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

Ancak web.configGoogleCalendarApplicationClientID anahtar içermiyor

Hata, herhangi bir statik işlev çağrısında veya herhangi bir sınıf örneği oluşturma işleminde atılır


24
Adamım bunu asla kendi başıma öğrenemezdim. Nokta aralarına çok fazla güveniyordum ve ne yazık ki beni kurtarmazlardı. Teşekkürler dostum! +1
Lukas

7
Katılıyorum . . . Ben de ayný ţey oldu. Anlamaya çalışarak saçımı çekiyordum. Çok teşekkürler!
dscarr

3
benim durumumda bağlantı dizesiydi.
Musakkhir Sayyed

1
Seni salla adamım! sen bir kurtarıcısın! Başvurulan proje eksik yapılandırma girişi olmadan hata ayıklama (adım adım) bile değildi. Bu koda girmeden config ile ilgili bir ipucu yoktu. 2 gün harcadıktan sonra haftamı kurtardın: P!
Pramod Sharma

1
@MuhammadWaqasIqbal Son cesur cümle anahtardır !!! ClientIDBu örnekte kullanılan HERHANGİ bir işlev bu hatayı alır. Harika gönderi.
vapcguy

57

The type initializer for 'CSMessageUtility.CSDetails' threw an exception. bu sınıftaki statik kurucunun bir İstisna atması anlamına gelir - bu nedenle ya CSDetails sınıfının statik kurucusuna ya da o sınıfın statik üyelerinin başlatılmasına bakmanız gerekir.


1
Yeterince emin. Soruna neden olan statik log4net logger örneği oluşturuyordum. Sorun, o projedeki log4net derlemesinin sürümünün diğer projelerin sürümüyle eşleşmemesiydi (ki shivan'ın özellikle dikkat çektiğini fark ettim.)
goku_da_master

1
NLog kullanırken de aynı sorunu yaşadım. Kaydedicileri statik oluşturucularda başlatma eğilimindeyim ve farklı projelerde sürümler arasındaki uyumsuzluk soruna neden oldu. her yerde aynı sürümü kullanmak sorunu çözdü.
shelbypereira

5

Tıpkı 'CSMessageUtility.CSDetails' kullandığınız gibi, bir Util sınıfında statik yöntemler kullanırken aynı soruna rastladım.

Sorun, sınıfın statik olarak başlatılması sırasında (statik yapıcı kullanılarak), çerçevenin sınıftaki statik değişkenleri (alanları) da başlatmasıydı. App.config değerlerini okumaya çalışır statik bir değişken vardı ve app.config ilgili ayarları eksik, böylece işlenmeyen bir özel durum neden oldu. Bunun sonucunda "Nesne başvurusu bir nesnenin örneğine ayarlanmadı." iç istisna olarak.


3

Bu başlatma hatalarının ne zaman atıldığını kontrol etmek için başka bir şey, hedef .NET sürümünün sunucuda yüklü olup olmadığını kontrol etmek olacaktır. Projeyi sağ tıklatıp uygulamanın hangi .NET sürümünü hedeflediğini görebilirsiniz.


3

Aynı yapılandırma özelliklerinden ikisine (app.config ile eşleşen) sahip olmanın neden olduğu aynı sorunu yaşadım:

    [ConfigurationProperty("TransferTimeValidity")]

2

Buna neden olabilecek başka bir senaryo, kodunuzu çağıran bir parçanız olduğunda:

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

OWSTIMER.EXE.CONFIGYapılandırma dosyası ayarları için dosyayı kullanmanız gerektiğini unutmayın. Ben App.configokumaya çalışıyorum bir dosya vardı ve benim iş örneği somutlaştırılması, benim kodunda Connfiguration.AppSettings& atıfta bir satır vardı çünkü bu hatayı alıyordu Configuration.ConnectionStrings. Sadece yoldan gittiğinizden emin olun:

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

ve yapılandırma ayarlarınızı OWSTIMER.EXE.CONFIGdosyaya yerleştirin.


2

Bu, yanlış sahip türüne (ownerType bağımsız değişkeni) kayıtlı bir bağımlılık özelliğiniz varsa oluşabilir.

Dikkat SomeOtherControl sizin YourControl olmalıdır.

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

Herhangi bir nedenle güç gider veya Visual Studio IDE çökerse, bin / debug bin / release içinde bu soruna neden olabilir ...

Sadece içeriği silin ve yeniden derleyin (ayak parmağım sıfırlama düğmesine bastığında kişisel deneyimden!)


1

Farklı ama yine de ilgili bir yapılandırmam vardı.

ConfigSections içinde bildirilmemiş bir özel yapılandırma bölümü olabilir .

Sadece bölümü bildirin ve hata kendi kendine çözülmelidir.


1

Derlemelerin çalışma zamanı sürümleri arasındaki uyumsuzluk nedeniyle bu sorunla karşılaştım. Lütfen ana montajın (çağrı yapan uygulama) ve belirtilen montajın çalışma zamanı sürümlerini doğrulayın


1

Hata'nın dediği gibi, Type / Class başlatılamadı. Bu genellikle sınıfın yapıcısında bir istisna olduğunda oluşur. En yaygın neden, bir config dosyasından yapıcı okumasında bir değer atamanız ve config dosyasında bu değerlerin eksik olmasıdır.


0

Benim durumumda, Logger.Crete'de ana (konsol) uygulamam tarafından kullanılan bir sınıf kütüphanesinin içinde başarısız oldum. Sorun benim konsol uygulamasında NLog.dll bir referans eklemek unuttum oldu. Başvuruyu doğru .NET Framework kitaplığı sürümüyle eklemek sorunu çözdü.


0

Bir WPF projesinde böyle bir dava vardı. Benim sorunum şöyle gitti:

DataTable myTable = FillTable(strMySqlQuery);

Burada FillTable()bir SQL sorgu dizesine dayalı bir DataTable döndürdü. Eğer "istisnayı panoya kopyala" seçeneğini yapmışsam, sanırım öyleydi ve Not Defteri'ne yapıştırıldım, mesajı görebiliyordum. Benim için öyleydi The input is not a valid Base-64 string as it contains a non-base 64 character.

Benim asıl sorun ben düşünme gibi çünkü sorgu dizesi, olmamalıdır şey vardı bu değildi string strMySqlQuery = "SELECT * FROM My_Table"benim dize ve o olabileceğini düşündüm *ya _ama asıl sorun oldu FillTable()ben başka bir çağrı vardı nerede, GetConnection()bir OracleConnectionnesneyi döndürerek işlevi açmak ve DataTable'ı almak ve döndürmek için kullanılır. İçinde benim bağlantı dizesi GetConnection()için app.configparametreleri alıyordu ve bunlardan biri yanlış adlandırılmış, bu yüzden hizmet hesabının parolası için boş bir değer ayarlamak ve DB bağlantısı yapma değildi. Bu nedenle, hatanın her koşul için tam olarak doğru olduğu her zaman değildir. Hatanın olduğu fonksiyona dalmak ve adım adım hata ayıklamak ve tüm değerlerin beklediğinizle doldurulmasını sağlamak en iyisidir.


0

Ben de iki hatayla bu hatayla karşılaştım

  1. BAL katmanından DAL katmanına yönlendirme yaparken bu istisnayla karşılaştım. İç istisna "Nesne Referans hatası" diyor.

  2. Web.Config dosya anahtarı eşleşmiyor.

Bu sorunu çözmek için yararlı umuyoruz.


0

Muhammed İkbal belirtilen ne benzer .. Ben VB.NET oldu ben bir anahtar-değer çifti kaldırmak vermedi projesi (aynı zamanda C # olabilir) App.configbir değişken küresel tarafından başvurulan edildiği Sub Main()arasında Module Main. Bu nedenle, istisna (ve sonu) Module Mainöncesinde oluşur Sub Main(). Keşke üzerinde bir kırılma noktası olsaydı Dim, ama genellikle küresel değişkenleri kırmazdık. App.config 'e atıfta bulunan küreselleri beyan etmemek için iyi bir neden olabilir? Başka bir deyişle, bu ...

Bilinmeyen Modülde 'System.TypeInitializationException' türünde işlenmeyen bir özel durum oluştu. 'Namespace.Main' için tür başlatıcı bir istisna attı.

Sebebiyle olur...

app.config

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

Ana modül

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

    Sub Main()

        // main code

    End Main
End Module

0

Benim durumumda, statik olan bir yardımcı sınıfım vardı. Bu sınıfta değişkenlere bağlı bir SqlCommand başlatmak için bir yöntem oldu. Bu, birkaç yerde çağrıldığından, yardımcı sınıfa taşındım ve gerektiğinde çağrıldım, bu yüzden bu yöntem de statikti. Şimdi Web.config bağlantı dizesini gösteren Global.asax bağlantı dize olan bir global özellik vardı. Aralıklı olarak "Helper" için tip başlatıcı bir istisna attı ". Eğer yöntemi Helper sınıfından, çağrıldığı sınıfa taşıdıysam iyiydi. İç istisna nesnenin boş olduğundan şikayet etti (Helper sınıfı). Yaptığım şey Global.asax'a Helper kullanarak eklemekti ve Global.asax tarafından kullanılmasa da bu sorunu çözdü.


0

Cevabım ayrıca Config bölümü ile de ilgilidir. Config dosyasından C # statik modülünde veya VB'nin Module.VB dosyasında değerler atarsanız, çalışma zamanında bu hatayı alırsınız.

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

Web.Config dosyasında eğik çizgi kullanılması da Çalışma zamanında bu hataya neden olur. Bu sorunu sadece BackSlash koyarak çözdüm

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


0

Bir try-catch bloğunda çökmekte olan çizgimi sardım, istisnayı yazdırdım ve yazdırıldıktan hemen sonra kesildi. Gösterilen kural dışı durum bilgisinde, hatanın oluşmasına neden olan dosyaya ve kod satırına işaret eden bir yığın izlemesi vardı.

resim açıklamasını buraya girin

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

Bir şekilde Visual Studio'dan çıkıp yeniden açmak bunu benim için çözdü.


0

Sözlük anahtarları benzersiz olmalı!

Benim durumumda bir Sözlük kullanıyordum ve içinde iki anahtarın yanlışlıkla aynı anahtarı bulduğunu gördüm.

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

0

Dikkate değer: Çözümümde birden fazla proje vardı ve referansları / Nuget kütüphanelerini eklemeyi unuttum. Statik sınıfta verilen kütüphaneleri kullanan bir yöntem çalıştırdığımda, belirtilen istisnayı attı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.