El siguiente es mi código de servicio de Windows. Cuando estoy depurando el código, obtengo el error / excepción:
El inicializador de tipo para 'CSMessageUtility.CSDetails' arrojó una excepción.
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
fuente
fuente
Respuestas:
Verifique la
InnerException
propiedad de laTypeInitializationException
; es probable que contenga información sobre el problema subyacente y exactamente dónde ocurrió.fuente
static CSDetails
en la claseCSMessageUtility.CSDetails
(y cualquier método que pueda llamar). Si no encuentra el problema por su cuenta, actualice la pregunta con ese código.The input is not a valid Base-64 string as it contains a non-base 64 character
qué función estaba volviendo a un objeto DataTable, pero para mí, en realidad, había un problema subyacente en el que estaba llamando a unapp.config
parámetro por el nombre incorrecto, por lo que una variable que estaba usando para formar mi cadena de conexiones fue nulo Por lo tanto, no se pudo abrirOracleConnection
en esa función para devolver la DataTable. El mejor consejo es sumergirse en la función subyacente que está devolviendo el error.Este problema puede ser causado si una clase intenta obtener el valor de una clave en web.config o app.config que no está presente allí.
Por ejemplo,
la clase tiene una variable estática.
Pero el web.config no contiene la
GoogleCalendarApplicationClientID
claveEl error se lanzará en cualquier llamada de función estática o en cualquier creación de instancia de clase
fuente
ClientID
en este ejemplo tendría este error. Buena publicación.The type initializer for 'CSMessageUtility.CSDetails' threw an exception.
significa que el constructor estático en esa clase arrojó una Excepción, por lo que debe buscar en el constructor estático de la clase CSDetails o en la inicialización de cualquier miembro estático de esa clase.fuente
Me encontré con el mismo problema, cuando estaba usando métodos estáticos en una clase Util, al igual que había usado 'CSMessageUtility.CSDetails'.
El problema fue que durante la inicialización estática de la clase (usando el constructor estático), el marco también inicializa las variables estáticas (campos) en la clase. Tenía una variable estática que intenta leer valores de app.config, y app.config no tenía la configuración respectiva, lo que resultó en una excepción no manejada. Esto resultó en la obtención de la "Referencia de objeto no establecida en una instancia de un objeto". como la excepción interna
fuente
Otra cosa para verificar cuando se generan estos errores de inicialización sería verificar si la versión de .NET de destino está instalada en el servidor. Puede hacer clic con el botón derecho en el proyecto y ver a qué versión .NET apunta la aplicación.
fuente
He tenido el mismo problema causado por tener dos de las mismas propiedades de configuración (que coincide con la app.config):
fuente
Otro escenario que puede causar esto es cuando tienes una parte de tu código que llama:
Tenga en cuenta que debe usar el
OWSTIMER.EXE.CONFIG
archivo para la configuración del archivo de configuración. Tenía unApp.config
archivo que intentaba leer y recibía este error porque al crear una instancia de mi instancia de trabajo, tenía una línea en mi código que se refería aConnfiguration.AppSettings
&Configuration.ConnectionStrings
. Solo asegúrate de seguir el camino:y coloque su configuración en el
OWSTIMER.EXE.CONFIG
archivo.fuente
Esto puede suceder si tiene una propiedad de dependencia que está registrada en el tipo de propietario incorrecto (argumento ownerType).
Observe que SomeOtherControl debería haber sido YourControl.
fuente
Si por alguna razón se corta la energía o el IDE de Visual Studio se bloquea, puede causar este problema dentro de su bin / debug bin / release ...
Simplemente elimine el contenido y vuelva a compilar (por experiencia personal cuando mi dedo del pie presione el botón de reinicio).
fuente
Tenía una configuración diferente pero aún relacionada.
Podría ser una sección de configuración personalizada que no se haya declarado en configSections .
Simplemente declare la sección y el error debería resolverse solo.
fuente
Encontré este problema debido a la falta de coincidencia entre las versiones de tiempo de ejecución de los ensamblados. Verifique las versiones de tiempo de ejecución del ensamblaje principal (aplicación de llamada) y el ensamblado referido
fuente
Como dice el Error, la inicialización del Tipo / Clase falló. Esto generalmente ocurre cuando hay alguna excepción en el constructor de la clase. La razón más común es que asigna algún valor en la lectura del constructor de un archivo de configuración y el archivo de configuración no tiene esos valores.
fuente
En mi caso, tuve este error en Logger. Crear dentro de una biblioteca de clase que estaba siendo utilizada por mi aplicación principal (consola). El problema era que había olvidado agregar una referencia a NLog.dll en mi aplicación de consola. Agregar la referencia con la versión correcta de la biblioteca .NET Framework solucionó el problema.
fuente
Tuve un caso como este en un proyecto de WPF. Mi problema estaba en una línea que decía así:
Donde
FillTable()
devolvió un DataTable basado en una cadena de consulta SQL. Si hice la opción "copiar excepción al portapapeles", creo que fue, y pegado en el Bloc de notas, podría ver el mensaje. Para mí lo fueThe input is not a valid Base-64 string as it contains a non-base 64 character
.Mi problema real no era que la cadena de consulta tenía algo que no debería estar allí, como estaba pensando, porque
string strMySqlQuery = "SELECT * FROM My_Table"
era mi cadena y pensaba que podría ser el*
o_
, pero el problema real estaba enFillTable()
, donde tuve una llamada a otro función,GetConnection()
que devolvió unOracleConnection
objeto, para abrirlo y recuperar y devolver la DataTable. En el interiorGetConnection()
, estaba obteniendo losapp.config
parámetros para mi cadena de conexión, y tenía uno de ellos mal nombrado, por lo que estaba estableciendo un valor nulo para la contraseña de la cuenta de servicio y no establecía la conexión DB. Por lo tanto, no siempre es donde el error es exactamente correcto para todas las circunstancias. Es mejor sumergirse en la función donde está el error y depurar paso a paso y asegurarse de que todos los valores se llenen con lo que espera.fuente
Yo también enfrenté este error en dos situaciones
Mientras realizaba la redirección de la capa BAL a la capa DAL, me enfrenté a esta excepción. La excepción interna dice que "Error de referencia de objeto".
Web.Config
La clave de archivo no coincide.Espero que esto sea útil para resolver su problema.
fuente
Similar a lo que dijo Muhammad Iqbal. Estaba en un proyecto VB.NET (también puede ser C #) donde eliminé un par clave-valor del
App.config
que fue referenciado por una variable global a laSub Main()
deModule Main
. Por lo tanto, la excepción (y ruptura) ocurreModule Main
antes delSub Main()
. Si solo tuviera un punto de quiebre en elDim
, pero no solemos romper en las variables globales. ¿Quizás una buena razón para no declarar los globales que hacen referencia a App.config? En otras palabras, esto ...Es causado por...
App.config
Módulo principal
fuente
En mi caso, tenía una clase auxiliar que era estática. En esa clase había un método para inicializar un SqlCommand dependiente de variables. Como esto se llamaba en varios lugares, lo moví a la clase auxiliar y llamé según fuera necesario, por lo que este método también era estático. Ahora tenía una propiedad global que era la cadena de conexión en Global.asax apuntando a la cadena de conexión en web.config. De forma intermitente obtenía "El inicializador de tipo para 'Helper' arrojó una excepción". Si moví el método de la clase Helper a la clase desde donde se estaba llamando, todo fue bueno. La excepción interna se quejó de que el objeto era nulo (clase Helper). Lo que hice fue agregar Using Helper a Global.asax y, aunque Global.asax no lo estaba utilizando, esto resolvió el problema.
fuente
Mi respuesta también está relacionada con la sección Configuración. Si asigna valores del archivo de configuración en la clase estática de C # o Module.VB de VB, obtendrá este error en tiempo de ejecución.
add key = "LogPath" value = "~ / Error_Log /"
El uso de la barra diagonal en Web.Config también genera este error en el tiempo de ejecución. Acabo de resolver este problema poniendo BackSlash
add key = "LogPath" value = "~ \ Error_Log \"
fuente
Envolví mi línea que se estrellaba en un bloque try-catch, imprimí la excepción y la rompí inmediatamente después de que se imprimió. La información de excepción mostrada tenía un seguimiento de pila que me señalaba el archivo y la línea de código que causaba la falla.
fuente
De alguna manera, salir de Visual Studio y volver a abrirlo resolvió esto para mí.
fuente
¡Las claves del diccionario deben ser únicas!
En mi caso, estaba usando un diccionario, y encontré que dos elementos tenían accidentalmente la misma clave.
fuente
Notable: tuve varios proyectos en mi solución y olvidé agregar las bibliotecas de referencias / Nuget. Cuando ejecuté un método en la clase estática, que usaba las bibliotecas dadas, arrojó la excepción mencionada.
fuente