Ниже приведен мой код службы окна. Когда я отладку кода, я получаю ошибку/ исключение:
инициализатор типа '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();
}
}
}
}
}
Проверьте свойство innerexceptionимущество
TypeInitializationException`; это, скорее всего, содержат информацию о возникшей проблеме, и именно там, где это произошло.
Эта проблема может быть вызвана, если класс пытается получить значение ключа в онлайн.конфиг или приложение.конфиг, которая не присутствуют.
например Класс имеет статическую переменную
private static string ClientID = System.Configuration.ConfigurationSettings.AppSettings["GoogleCalendarApplicationClientID"].ToString();
Но веб.конфиг не'т содержать ключ GoogleCalendarApplicationClientId
Ошибки будут брошены на любой статической функции вызова или любые создания экземпляра класса
Инициализатор типа 'CSMessageUtility.CSDetails' выбросил исключение.
означает, что статический конструктор для этого класса бросил исключение - значит нужно искать либо в статическом конструкторе класса CSDetails, или в инициализации статических членов класса.
Я столкнулся с той же проблемой, когда я использую статические методы в классе утиль, как вы использовали 'CSMessageUtility.CSDetails'.
Проблема в том, что во время статической инициализации класса (используя статический конструктор), платформа также инициализировать статические переменные (поля) класса. Я имел статическую переменную, которая пытается считывать значения из приложения.config и приложения.конфигурации не хватает соответствующих параметров, что приводит к ООН-обрабатываются исключения. В результате попадания в "ссылка на объект не указывает на экземпляр объекта." и как внутреннее исключение.
Одна другая вещь, чтобы проверить, когда эти ошибки инициализации бросили бы проверить, если цель .Net версии установленной на сервере. Вы можете щелкните правой кнопкой мыши проект и посмотреть, что .Чистая версия приложение предназначено для.
Я'вэ была такая же проблема вызвана имея две одинаковые свойства конфигурации (что соответствует приложение.конфигурации):
[ConfigurationProperty("TransferTimeValidity")]
Это может произойти, если у вас есть свойство зависимостей, который зарегистрирован на неправильный тип владельца (аргумент ownerType).
Внимание SomeOtherControl надо было элемента управления.
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));
}
Другой сценарий, который может вызвать это, когда у вас есть кусок кода, который вызывает:
string sParam = **ConfigurationManager.AppSettings["SOME_PARAM"].ToString();
Имейте в виду, что вы должны использовать OWSTIMER.Ехе.Файл конфигурации для настройки файла конфигурации. У меня было приложение.файл config
, что я пытался читать, и я получаю эту ошибку, потому что на создание моего экземпляра работу, у меня была строка в моем коде, что имел в виду Connfiguration.Параметр appsettings
& конфигурации.Выберите
. Просто убедитесь, что вы идете по пути:
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN
и место настройки в OWSTIMER.Ехе.Файл config`.
Как ошибка говорит, инициализация типа/класса не удалось. Обычно это происходит, когда есть некоторые исключения в конструкторе класса. Самая распространенная причина-это присвоить какое-то значение в конструкторе чтение из файла config и файл config не хватает этих ценностей.
Если по каким-то причинам власть идет или Visual Studio интегрированная среда разработки падает, это может вызвать проблемы в вашей бин/отладки ОГРН/выпуск...
Просто удалить контент и перекомпиляции (из личного опыта, когда мой палец нажал на кнопку сброса!)
У меня были разные, но по-прежнему связаны конфигурации.
Может быть в разделе настраиваемые конфигурации, которые еще'т был объявлен в configsections, он.
Просто объявить раздел и ошибка должна самоустраниться.
Я столкнулся с этой проблемой из-за несоответствия времени выполнения версии сборок. Проверьте версии среды выполнения основной сборки (вызов приложений) и упомянутой ассамблеи
Был случай такой в проект WPF. Мой вопрос был на линии, что-то вроде этого:
DataTable myTable = FillTable(strMySqlQuery);
Где FillTable()возвращает объект DataTable на основе строки SQL-запроса. Если бы я делал в "копию исключение в буфер обмена и" вариант, я думаю, что это было, и вставить в блокнот, я увидела сообщение. Для меня это было
входной сигнал является недопустимым в base-64 строки, так как он содержит счисления с основанием 64 символ`.
Моя настоящая проблема была'т, что в строке запроса то, что нужно'т быть там, как я думал, потому что строки strMySqlQuery = то "выбрать из таблицы my_table"в мой строки и думал, что это может быть
или
_, Но настоящая проблема была в FillTable()
, где у меня был вызов другой функции, метод getconnection ()
, который вернул объекта oracleconnection объект, для того, чтобы открыть его и извлечь и вернуть объект DataTable. В метод getconnection()
я получаю `приложение.параметры конфигурации для моей строки подключения, и я был один из них неправильно назвали, поэтому он сидел нулевое значение для учетной записи службы'ы пароль и не делает подключение к БД. Так что's не всегда там, где ошибки точно правильные для всех обстоятельств. Лучше окунуться в функции, где ошибка и отладка пошаговую инструкцию и убедитесь, что все значения наполняется то, что вы ожидаете.
Я тоже столкнулась с этой ошибкой в две ситуации
При выполнении перенаправления от бол слоя от DAL слой я столкнулся это исключение. Внутреннее исключение говорит, что "ссылка на объект ошибке".
`В интернете.Конфигурация`` ключевой файл не соответствует.
Надеюсь, что это полезно, чтобы решить вашу проблему.
Похоже на то, что Мухаммад Икбал заявлял.. Я был в VB.NET (также может быть проект C#), где я удалить пару ключ-значение из приложения.конфигурации, по которым была ссылка на переменную глобальной, чтобы суб Основной()
от основной модуль. Таким образом, исключение (и разрыв) возникает в основной модуль
до суб()
. Если бы только у меня был брейк-пойнт на тусклый
, но мы не'т, как правило, разбиваются о глобальных переменных. Возможно, причина не объявлять глобальные переменные, ссылающиеся на приложения.конфиг? Другими словами, этот...
необработанное исключение типа 'системы.TypeInitializationException' произошло в неизвестный модуль. Инициализатор типа 'пространство имен.Главная' бросил исключение.
Это вызвано...
Приложение.конфиг
<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
В моем случае, я вспомогательный класс, который был статическим. В этом классе был метод для инициализации sqlcommand, который зависит от переменных. Как это было в нескольких местах я перенесла его на вспомогательный класс и вызываемые по мере необходимости, так что этот метод был статическим. Сейчас у меня глобальные свойства, строку подключения в глобальной.эйсакс указывая на строку подключения в web.конфиг. Периодически я хотел бы получить на "инициализатор типа 'помощника' выбросил исключение, то". Если я переехала метод из вспомогательного класса в класс, где он был вызван все было хорошо. Внутреннее исключение жаловался на объект значение null (вспомогательный класс). То, что я делал, было добавить с помощью помощника до глобального.asax и даже если она не была использована глобальная.эйсакс это решило проблему.
Мой ответ тоже относятся к разделу конфигурации. Если вы присваиваете значение из конфигурационного файла в статический класс C# или модуль.Б. Б., Вы получите эту ошибку во время выполнения.
добавить ключ="по пути журнала" По-значение=" и~/функцию error_log/с"
Используя косую черту в Интернете.Config также приводит к этой ошибке на этапе выполнения. Я просто решил эту проблему, поставив обратную косую черту
добавить ключ="по пути журнала" По-значение=" у~\функцию error_log\" по
Я завернула мои строки, что был сбой в try-catch блок, распечатал исключения и немедленно вскрыт после того, как она была напечатана. Показанное исключение информации трассировки стека, который указал мне на файл и строку кода, вызывающие неисправности.
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.
Как-то завершить работу Visual Studio и повторно открыв ее решить это для меня.
В моем случае у меня это не на регистратор.Создать внутри библиотека классов, которая используется мой главный (консоли) приложение. Проблема была в том, что я забыл добавить ссылку на NLog.dll в мое приложение консоли. Добавление ссылки с правильным .Библиотека версии исправлена проблема.