Ниже приведен мой код службы 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();
}
}
}
}
}
c#
windows-services
gofor.net
источник
источник
Ответы:
Проверьте
InnerException
собственностьTypeInitializationException
; скорее всего, она содержит информацию об основной проблеме и о том, где именно она возникла.источник
static CSDetails
в классеCSMessageUtility.CSDetails
(и любые методы, которые он может вызывать). Если вы не нашли проблему самостоятельно, обновите вопрос этим кодом.The input is not a valid Base-64 string as it contains a non-base 64 character
что функция возвращала объекту DataTable, но для меня, на самом деле, была основная проблема, когда я вызывалapp.config
параметр с неправильным именем, поэтому переменную я использовал для формирования строки подключения был нулевым Поэтому он не может открытьOracleConnection
функцию в этой функции для возврата DataTable. Лучший совет - погрузиться в основную функцию, которая возвращает ошибку.Эта проблема может быть вызвана, если класс пытается получить значение ключа в web.config или app.config, которого там нет.
например,
класс имеет статическую переменную
Но web.config не содержит
GoogleCalendarApplicationClientID
ключОшибка будет выдана при любом статическом вызове функции или создании экземпляра любого класса
источник
ClientID
в этом примере, будет иметь эту ошибку. Отличный пост.The type initializer for 'CSMessageUtility.CSDetails' threw an exception.
означает, что статический конструктор этого класса вызвал исключение - поэтому вам нужно искать либо в статическом конструкторе класса CSDetails, либо в инициализации любых статических членов этого класса.источник
Я столкнулся с той же проблемой, когда использовал статические методы в классе Util, так же, как вы использовали CSMessageUtility.CSDetails.
Проблема заключалась в том, что во время статической инициализации класса (с использованием статического конструктора) платформа также инициализирует статические переменные (поля) в классе. У меня была статическая переменная, которая пытается прочитать значения из app.config, и app.config пропустил соответствующие настройки, что привело к необработанному исключению. Это привело к тому, что «Ссылка на объект не установлена на экземпляр объекта». как внутреннее исключение.
источник
Еще одна вещь, которую нужно проверить при возникновении этих ошибок инициализации, это проверить, установлена ли целевая версия .NET на сервере. Вы можете щелкнуть правой кнопкой мыши по проекту и посмотреть, на какую версию .NET нацеливается приложение.
источник
У меня была та же проблема, вызванная наличием двух одинаковых свойств конфигурации (что соответствует app.config):
источник
Другой сценарий, который может вызвать это, когда у вас есть фрагмент кода, который вызывает:
Имейте в виду, что вы должны использовать
OWSTIMER.EXE.CONFIG
файл для настройки файла конфигурации. У меня былApp.config
файл, который я пытался прочитать, и я получал эту ошибку, потому что при создании экземпляра моего задания в моем коде была строка, которая ссылалась наConnfiguration.AppSettings
&Configuration.ConnectionStrings
. Просто убедитесь, что вы идете по пути:и поместите настройки вашей конфигурации в
OWSTIMER.EXE.CONFIG
файл.источник
Это может произойти, если у вас есть свойство зависимости, которое зарегистрировано с неверным типом владельца (аргумент ownerType).
Обратите внимание, что SomeOtherControl должен был быть YourControl.
источник
Если по какой-либо причине происходит сбой питания или происходит сбой IDE Visual Studio, это может вызвать эту проблему в вашем bin / debug bin / release ...
Просто удалите содержимое и перекомпилируйте (из личного опыта, когда мой палец нажал кнопку сброса!)
источник
У меня была другая, но все еще связанная конфигурация.
Может быть пользовательский раздел конфигурации, который не был объявлен в configSections .
Просто объявите раздел, и ошибка должна разрешиться сама собой.
источник
Я столкнулся с этой проблемой из-за несоответствия между версиями сборок во время выполнения. Проверьте версии среды выполнения основной сборки (вызывающего приложения) и указанной сборки.
источник
Как говорит ошибка, инициализация типа / класса не удалась. Это обычно происходит, когда в конструкторе класса есть какое-то исключение. Наиболее распространенная причина заключается в том, что вы присваиваете какое-то значение в конструкторе, считывающем из файла конфигурации, а в файле конфигурации отсутствуют эти значения.
источник
В моем случае это происходило с ошибкой в Logger.Create внутри библиотеки классов, которая использовалась моим основным (консольным) приложением. Проблема была в том, что я забыл добавить ссылку на NLog.dll в моем консольном приложении. Добавление ссылки с правильной версией библиотеки .NET Framework устранило проблему.
источник
Был такой случай в проекте WPF. Моя проблема была на линии, которая шла так:
Где
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
параметры для моей строки подключения, и у меня был один из них неправильно назван, поэтому он устанавливал нулевое значение для пароля учетной записи службы и не устанавливал соединение с БД. Так что это не всегда, где ошибка точно верна для всех обстоятельств. Лучше всего погрузиться в функцию, где есть ошибка, и выполнить пошаговую отладку и убедиться, что все значения заполняются тем, что вы ожидаете.источник
Я тоже сталкивался с этой ошибкой в двух ситуациях
При выполнении перенаправления с уровня BAL на уровень DAL я столкнулся с этим исключением. Внутреннее исключение говорит, что «Ошибка ссылки на объект».
Web.Config
Ключ файла не совпадает.Надеюсь, что это полезно для решения вашей проблемы.
источник
Подобно тому, что сказал Мухаммед Икбал ... Я был в проекте VB.NET (может быть также C #), где я удалил пару ключ-значение из той, на
App.config
которую ссылалась глобальная переменнаяSub Main()
of ofModule Main
. Таким образом, исключение (и разрыв) происходит вModule Main
доSub Main()
. Если бы у меня была точка остановаDim
, но мы обычно не ломали глобальные переменные. Возможно, это хорошая причина не объявлять глобальные ссылки на App.config? Другими словами, это ...Это вызвано...
App.config
Основной модуль
источник
В моем случае у меня был вспомогательный класс, который был статическим. В этом классе был метод для инициализации SqlCommand, зависящей от переменных. Поскольку это вызывалось в нескольких местах, я переместил его в вспомогательный класс и вызывал по мере необходимости, поэтому этот метод также был статическим. Теперь у меня было глобальное свойство - строка подключения в Global.asax, указывающая на строку подключения в web.config. Периодически я получал бы: «Инициализатор типа для« Помощника »выдал исключение». Если бы я переместил метод из класса Helper в класс, где он вызывался, все было хорошо. Внутреннее исключение жаловалось на нулевой объект (класс Helper). Что я сделал, так это добавил Using Helper к Global.asax, и хотя он не использовался Global.asax, это решило проблему.
источник
Мой ответ также связан с разделом Config. Если вы присваиваете значения из файла конфигурации в статическом классе C # или Module.VB VB, вы получите эту ошибку во время выполнения.
add key = "LogPath" value = "~ / Error_Log /"
Использование прямой косой черты в Web.Config также приводит к этой ошибке во время выполнения. Я только решил эту проблему, поставив BackSlash
add key = "LogPath" value = "~ \ Error_Log \"
источник
Я обернул свою строку, которая вылетала в блоке try-catch, распечатал исключение и сразу же оборвал его после печати. Показанная информация об исключении содержала трассировку стека, которая указывала мне на файл и строку кода, вызывающую возникновение ошибки.
источник
Каким-то образом выход из Visual Studio и повторное его открытие решили для меня это.
источник
Ключи словаря должны быть уникальными!
В моем случае я использовал словарь и обнаружил, что два элемента в нем случайно имеют один и тот же ключ.
источник
Примечательно: в моем решении было несколько проектов, и я забыл добавить библиотеки ссылок / Nuget. Когда я запустил метод в статическом классе, который использовал данные библиотеки, он бросил упомянутое исключение.
источник