Инициализатор типа для MyClass выдал исключение - PullRequest
200 голосов
/ 09 декабря 2010

Ниже приведен мой код службы Windows.Когда я отлаживаю код, я получаю сообщение об ошибке / исключение:

Инициализатор типа для '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();
                }
            }
        }
    }
}

Ответы [ 20 ]

322 голосов
/ 09 декабря 2010

Проверьте InnerException свойство TypeInitializationException; скорее всего, она содержит информацию об основной проблеме и о том, где именно она возникла.

171 голосов
/ 01 марта 2013

Эта проблема может быть вызвана, если класс пытается получить значение ключа в web.config или app.config которого там нет.

например
Класс имеет статическую переменную

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

Но web.config не содержит GoogleCalendarApplicationClientIDkey

Ошибка будет выдана при любом статическом вызове функции или при создании любого экземпляра класса

54 голосов
/ 09 декабря 2010

The type initializer for 'CSMessageUtility.CSDetails' threw an exception. означает, что статический конструктор этого класса вызвал исключение - поэтому вам нужно искать либо в статическом конструкторе класса CSDetails, либо в инициализации любых статических членов этого класса.

5 голосов
/ 20 августа 2013

Я столкнулся с той же проблемой, когда использовал статические методы в классе Util, как вы использовали CSMessageUtility.CSDetails.

Проблема заключалась в том, что во время статической инициализации класса (с использованием статического конструктора) каркас также инициализировал статические переменные (поля) в классе. У меня была статическая переменная, которая пытается прочитать значения из app.config, и app.config пропустил соответствующие настройки, что привело к необработанному исключению. Это привело к тому, что «Ссылка на объект не установлена ​​для экземпляра объекта». как внутреннее исключение.

3 голосов
/ 12 мая 2015

У меня была та же проблема, вызванная наличием двух одинаковых свойств конфигурации (что соответствует app.config):

    [ConfigurationProperty("TransferTimeValidity")]
3 голосов
/ 17 февраля 2015

Еще одна вещь, которую нужно проверить при возникновении этих ошибок инициализации, это проверить, установлена ​​ли целевая версия .NET на сервере. Вы можете щелкнуть правой кнопкой мыши по проекту и посмотреть, на какую версию .NET нацеливается приложение.

2 голосов
/ 24 августа 2016

Это может произойти, если у вас есть свойство зависимости, которое зарегистрировано с неверным типом владельца (аргумент ownerType).

Уведомление 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));
}
2 голосов
/ 16 мая 2014

Другой сценарий, который может вызвать это, когда у вас есть фрагмент кода, который вызывает:

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.

1 голос
/ 21 сентября 2015

У меня была другая, но все еще связанная конфигурация.

Может быть пользовательским разделом конфигурации, который не был объявлен в configSections .

Просто объявите раздел, и ошибка должна разрешиться сама собой.

1 голос
/ 16 июня 2013

Если по какой-либо причине отключается питание или происходит сбой IDE Visual Studio, это может вызвать эту проблему в вашем bin / debug bin / release ...

Просто удалите содержимое и перекомпилируйте (из личного опыта, когда мой палец нажал кнопку сброса!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...