A seguir está o meu código de serviço do Windows. Quando estou depurando o código, estou recebendo o erro / exceção:
O inicializador de tipo para 'CSMessageUtility.CSDetails' lançou uma exceção.
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
fonte
fonte
Respostas:
Verifique a
InnerException
propriedade doTypeInitializationException
; é provável que contenha informações sobre o problema subjacente e exatamente onde ocorreu.fonte
static CSDetails
na classeCSMessageUtility.CSDetails
(e quaisquer métodos que ele possa chamar). Se você não encontrar o problema sozinho, atualize a pergunta com esse código.The input is not a valid Base-64 string as it contains a non-base 64 character
que uma função estava retornando para um objeto DataTable, mas, para mim, havia um problema subjacente em que eu estava chamando umapp.config
parâmetro com o nome errado, portanto, uma variável que eu estava usando para formar minha string de conexão foi nulo. Portanto, não foi possível abrir aOracleConnection
função nessa para retornar o DataTable. O melhor conselho é mergulhar na função subjacente que está retornando o erro.Esse problema pode ser causado se uma classe tentar obter o valor de uma chave no web.config ou app.config que não está presente lá.
por exemplo,
a classe tem uma variável estática
Mas o web.config não contém a
GoogleCalendarApplicationClientID
chaveO erro será gerado em qualquer chamada de função estática ou em qualquer criação de instância de classe
fonte
ClientID
neste exemplo teria esse erro. Ótimo post.The type initializer for 'CSMessageUtility.CSDetails' threw an exception.
significa que o construtor estático nessa classe lançou uma exceção - portanto, é necessário procurar no construtor estático da classe CSDetails ou na inicialização de qualquer membro estático dessa classe.fonte
Encontrei o mesmo problema quando estava usando métodos estáticos em uma classe Util, exatamente como você usou 'CSMessageUtility.CSDetails'.
O problema era que, durante a inicialização estática da classe (usando o construtor estático), a estrutura também inicializou as variáveis estáticas (campos) na classe. Eu tinha uma variável estática que tenta ler valores do app.config, e o app.config estava ausente nas configurações respectivas, resultando em uma exceção não tratada. Isso resultou na obtenção da "Referência de objeto não definida para uma instância de um objeto". como a exceção interna.
fonte
Outra coisa a verificar quando esses erros de inicialização são lançados seria verificar se a versão .NET de destino está instalada no servidor. Você pode clicar com o botão direito do mouse no projeto e ver qual versão do .NET o aplicativo está direcionando.
fonte
Eu tive o mesmo problema causado por ter duas das mesmas propriedades de configuração (que correspondem ao app.config):
fonte
Outro cenário que pode causar isso é quando você tem um pedaço do seu código que chama:
Lembre-se de que você precisa usar o
OWSTIMER.EXE.CONFIG
arquivo para definir as configurações do arquivo. Eu tinha umApp.config
arquivo que estava tentando ler e estava recebendo esse erro porque, na instanciação da minha instância de trabalho, havia uma linha no meu código que se referia aConnfiguration.AppSettings
&Configuration.ConnectionStrings
. Apenas certifique-se de seguir o caminho:e coloque suas definições de configuração no
OWSTIMER.EXE.CONFIG
arquivofonte
Isso pode acontecer se você tiver uma propriedade de dependência registrada no tipo de proprietário errado (argumento ownerType).
Observe que SomeOtherControl deveria ter sido YourControl.
fonte
Se, por qualquer motivo, a energia acabar ou o IDE do Visual Studio travar, pode causar esse problema dentro da sua lixeira / depuração / liberação ...
Basta excluir o conteúdo e recompilar (por experiência pessoal, quando meu dedo pressionou o botão de redefinição!)
fonte
Eu tinha uma configuração diferente, mas ainda relacionada.
Pode ser uma seção de configuração personalizada que não foi declarada em configSections .
Apenas declare a seção e o erro deve se resolver.
fonte
Encontrei esse problema devido à incompatibilidade entre as versões de tempo de execução dos assemblies. Verifique as versões de tempo de execução do assembly principal (aplicativo de chamada) e o assembly mencionado
fonte
Como o erro indica, a inicialização do tipo / classe falhou. Isso geralmente ocorre quando há alguma exceção no construtor da classe. O motivo mais comum é atribuir algum valor na leitura do construtor de um arquivo de configuração e o arquivo de configuração está faltando esses valores.
fonte
No meu caso, tive essa falha no Logger.Create dentro de uma biblioteca de classes que estava sendo usada pelo meu aplicativo principal (console). O problema foi que eu tinha esquecido de adicionar uma referência ao NLog.dll no meu aplicativo de console. A adição da referência com a versão correta da biblioteca do .NET Framework corrigiu o problema.
fonte
Teve um caso como este em um projeto WPF. Meu problema estava em uma linha que foi assim:
Onde
FillTable()
retornou um DataTable com base em uma seqüência de caracteres de consulta SQL. Se eu fiz a opção "copiar exceção na área de transferência", acho que sim, e colei no bloco de notas, consegui ver a mensagem. Para mim foiThe input is not a valid Base-64 string as it contains a non-base 64 character
.Meu problema real não era que a string de consulta tivesse algo que não deveria estar lá, como eu estava pensando, porque
string strMySqlQuery = "SELECT * FROM My_Table"
era minha string e pensei que poderia ser o*
ou_
, mas o problema real estavaFillTable()
, onde eu tinha uma ligação para outra ,GetConnection()
que retornou umOracleConnection
objeto, para abri-lo, recuperar e retornar o DataTable. Lá dentro,GetConnection()
eu estava obtendo osapp.config
parâmetros para minha cadeia de conexão, e eu tinha um deles com o nome errado, por isso definia um valor nulo para a senha da conta de serviço e não fazia a conexão com o banco de dados. Portanto, nem sempre é onde o erro é exatamente correto para todas as circunstâncias. É melhor mergulhar na função onde está o erro e depurar passo a passo e garantir que todos os valores sejam preenchidos com o que você espera.fonte
Eu também enfrentei esse erro em duas situações
Ao executar o redirecionamento da camada BAL para a camada DAL, enfrentei essa exceção. A exceção interna diz que "Erro de referência de objeto".
Web.Config
chave do arquivo não corresponde.Espero que isso seja útil para resolver seu problema.
fonte
Semelhante ao que Muhammad Iqbal declarou .. Eu estava em um projeto VB.NET (também pode ser C #) em que removi um par de valores-chave do
App.config
qual foi referenciada por uma variável global àSub Main()
deModule Main
. Portanto, a exceção (e quebra) ocorreModule Main
antes doSub Main()
. Se ao menos eu tivesse um ponto de interrupção noDim
, mas normalmente não interrompemos as variáveis globais. Talvez um bom motivo para não declarar globais referenciando App.config? Em outras palavras, isso ...É causado por...
App.config
Módulo principal
fonte
No meu caso, eu tinha uma classe auxiliar que era estática. Nessa classe, havia um método para inicializar um SqlCommand dependente de variáveis. Como isso estava sendo chamado em vários lugares, eu o mudei para a classe auxiliar e chamei conforme necessário, então esse método também era estático. Agora eu tinha uma propriedade global que era a cadeia de conexão no Global.asax, apontando para a cadeia de conexão no web.config. Intermitentemente, eu receberia "O inicializador de tipo para 'Helper' lançou uma exceção". Se eu movesse o método da classe Helper para a classe em que ele estava sendo chamado, tudo seria bom. A exceção interna reclamou do objeto ser nulo (classe Helper). O que fiz foi adicionar o Using Helper ao Global.asax e, embora não estivesse sendo usado pelo Global.asax, isso resolveu o problema.
fonte
Minha resposta também está relacionada à seção Config. Se você atribuir valores do arquivo Config na classe estática de C # ou Module.VB do VB, você receberá esse erro no tempo de execução.
adicione key = "LogPath" value = "~ / Error_Log /"
O uso da barra no Web.Config também gera esse erro no tempo de execução. Eu apenas resolvi esse problema colocando o BackSlash
adicione key = "LogPath" value = "~ \ Error_Log \"
fonte
Enrolei minha linha que estava travando em um bloco try-catch, imprimi a exceção e violei imediatamente após a impressão. As informações de exceção mostradas tinham um rastreamento de pilha que me indicava o arquivo e a linha de código que causava a falha.
fonte
De alguma forma, sair do Visual Studio e reabri-lo resolveu isso para mim.
fonte
As chaves do dicionário devem ser únicas!
No meu caso, eu estava usando um dicionário e encontrei dois itens acidentalmente com a mesma chave.
fonte
Digno de nota: eu tinha vários projetos em minha solução e esqueci de adicionar as bibliotecas de referências / Nuget. Quando executei um método na classe estática, que usava as bibliotecas fornecidas, lançou a exceção mencionada.
fonte