Инициализатор типа для 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 ]

1 голос
/ 05 мая 2016

Я столкнулся с этой проблемой из-за несоответствия между версиями сборок во время выполнения. Проверьте версии среды выполнения основной сборки (вызывающего приложения) и указанной сборки

0 голосов
/ 22 июня 2019

Каким-то образом выход из Visual Studio и повторное его открытие решили эту проблему для меня.

0 голосов
/ 29 июня 2019

Как говорит ошибка, инициализация типа / класса не удалась.Обычно это происходит, когда в конструкторе класса есть какое-то исключение.Наиболее распространенная причина заключается в том, что вы назначаете какое-то значение в конструкторе, считывающем из файла конфигурации, а в файле конфигурации отсутствуют эти значения.

0 голосов
/ 04 января 2019

Мой ответ также относится к разделу конфигурации. Если вы присваиваете значения из файла конфигурации в статическом классе C # или Module.VB VB, вы получите эту ошибку во время выполнения.

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

Использование прямой косой черты в Web.Config также приводит к этой ошибке во время выполнения. Я только что решил эту проблему, поставив BackSlash

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

0 голосов
/ 15 февраля 2019

Я завернул свою строку, которая вылетала в блоке try-catch, распечатал исключение и сразу прервался после его печати. Показанная информация об исключении содержала трассировку стека, которая указала мне на файл и строку кода, вызвавшую ошибку.

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 голосов
/ 08 мая 2018

В моем случае у меня был вспомогательный класс, который был статическим. В этом классе был метод для инициализации SqlCommand, зависящей от переменных. Поскольку это вызывалось в нескольких местах, я переместил его в вспомогательный класс и вызывал по мере необходимости, поэтому этот метод также был статическим. Теперь у меня было глобальное свойство - строка подключения в Global.asax, указывающая на строку подключения в web.config. Периодически я получал бы: «Инициализатор типа для« Помощника »выдал исключение». Если бы я переместил метод из класса Helper в класс, где он вызывался, все было хорошо. Внутреннее исключение жаловалось на нулевой объект (класс Helper). Я добавил «Использование помощника» в Global.asax, и хотя Global.asax не использовал его, это решило проблему.

0 голосов
/ 22 марта 2018

Подобно тому, что сказал Мухаммед Икбал. Я был в проекте VB.NET (может быть также C #), где я удалил пару ключ-значение из 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 голосов
/ 13 августа 2017

Я тоже сталкивался с этой ошибкой в ​​двух ситуациях

  1. При выполнении перенаправления со слоя BAL на слой DAL я столкнулся с этим исключением. Внутреннее исключение говорит, что «Ошибка ссылки на объект».

  2. Web.Config ключ файла не совпадает.

Надеюсь, это поможет решить вашу проблему.

0 голосов
/ 30 октября 2015

В моем случае это произошло с ошибкой в ​​Logger.Create внутри библиотеки классов, которая использовалась моим основным (консольным) приложением. Проблема была в том, что я забыл добавить ссылку на NLog.dll в моем консольном приложении. Добавление ссылки с правильной версией библиотеки .NET Framework устранило проблему.

0 голосов
/ 11 августа 2016

Был такой случай в проекте WPF. Моя проблема была в строке, которая шла так:

DataTable myTable = FillTable(strMySqlQuery);

Где FillTable() вернул DataTable на основе строки запроса SQL. Если бы я сделал опцию «копировать исключение в буфер обмена», я думаю, что это было, и вставил в Блокнот, я мог видеть сообщение. Для меня это было 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, чтобы открыть его, получить и вернуть DataTable. Внутри GetConnection() я получал параметры app.config для моей строки подключения, и у меня был один из них неправильно назван, поэтому он устанавливал нулевое значение для пароля учетной записи службы и не устанавливал соединение с БД. Так что это не всегда, где ошибка точно верна для всех обстоятельств. Лучше всего погрузиться в функцию, в которой обнаружена ошибка, и выполнить пошаговую отладку и убедиться, что все значения соответствуют ожидаемым.

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