Voici mon code de service Windows. Lorsque je débogue le code, j'obtiens l'erreur / exception:
L'initialiseur de type pour «CSMessageUtility.CSDetails» a levé une exception.
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
la source
la source
Réponses:
Vérifiez la
InnerException
propriété duTypeInitializationException
; il est susceptible de contenir des informations sur le problème sous-jacent, et exactement où il s'est produit.la source
static CSDetails
de la classeCSMessageUtility.CSDetails
(et toutes les méthodes qu'elle peut appeler). Si vous ne trouvez pas le problème par vous-même, mettez à jour la question avec ce code.The input is not a valid Base-64 string as it contains a non-base 64 character
ce qu'une fonction renvoyait à un objet DataTable, mais pour moi, il y avait en fait un problème sous-jacent où j'appelais unapp.config
paramètre avec le mauvais nom, donc une variable que j'utilisais pour former ma chaîne de connexion était nul. Par conséquent, il n'a pas pu ouvrir laOracleConnection
fonction in pour retourner le DataTable. Le meilleur conseil est de plonger dans la fonction sous-jacente qui renvoie l'erreur.Ce problème peut être provoqué si une classe essaie d'obtenir la valeur d'une clé dans web.config ou app.config qui n'y est pas présente.
Par exemple,
la classe a une variable statique
Mais le web.config ne contient pas la
GoogleCalendarApplicationClientID
cléL'erreur sera lancée sur tout appel de fonction statique ou toute création d'instance de classe
la source
ClientID
dans cet exemple aurait cette erreur. Très bonne publication.The type initializer for 'CSMessageUtility.CSDetails' threw an exception.
signifie que le constructeur statique de cette classe a levé une exception - vous devez donc regarder soit dans le constructeur statique de la classe CSDetails, soit dans l'initialisation des membres statiques de cette classe.la source
J'ai rencontré le même problème, lorsque j'utilisais des méthodes statiques dans une classe Util, tout comme vous aviez utilisé «CSMessageUtility.CSDetails».
Le problème était que lors de l'initialisation statique de la classe (à l'aide du constructeur statique), le framework initialisait également les variables statiques (champs) de la classe. J'avais une variable statique qui tente de lire les valeurs de app.config, et app.config manquait les paramètres respectifs, entraînant ainsi une exception non gérée. Cela a entraîné l'obtention de la «référence d'objet non définie sur une instance d'un objet». comme l'exception intérieure.
la source
Une autre chose à vérifier lorsque ces erreurs d'initialisation sont levées serait de vérifier si la version .NET cible est installée sur le serveur. Vous pouvez cliquer avec le bouton droit sur le projet et voir quelle version .NET cible l'application.
la source
J'ai eu le même problème dû au fait d'avoir deux des mêmes propriétés de configuration (qui correspondent à app.config):
la source
Un autre scénario qui pourrait provoquer cela est lorsque vous avez un morceau de votre code qui appelle:
N'oubliez pas que vous devez utiliser le
OWSTIMER.EXE.CONFIG
fichier pour les paramètres du fichier de configuration. J'avais unApp.config
fichier que j'essayais de lire et j'obtenais cette erreur car lors de l'instanciation de mon instance de travail, j'avais une ligne dans mon code qui faisait référence àConnfiguration.AppSettings
&Configuration.ConnectionStrings
. Assurez-vous simplement de suivre le chemin:et placez vos paramètres de configuration dans le
OWSTIMER.EXE.CONFIG
fichier.la source
Cela peut se produire si vous avez une propriété de dépendance qui est enregistrée dans le mauvais type de propriétaire (argument ownerType).
Remarquez que SomeOtherControl aurait dû être YourControl.
la source
Si, pour une raison quelconque, l'alimentation est coupée ou que l'IDE de Visual Studio se bloque, cela peut provoquer ce problème dans votre bin / debug bin / release ...
Il suffit de supprimer le contenu et de recompiler (à partir de mon expérience personnelle lorsque mon orteil a appuyé sur le bouton de réinitialisation!)
la source
J'avais une configuration différente mais toujours liée.
Il peut s'agir d'une section de configuration personnalisée qui n'a pas été déclarée dans configSections .
Déclarez simplement la section et l'erreur devrait se résoudre d'elle-même.
la source
J'ai rencontré ce problème en raison d'une incompatibilité entre les versions d'exécution des assemblys. Veuillez vérifier les versions d'exécution de l'assembly principal (application appelante) et de l'assembly référencé
la source
Comme le dit l'erreur, l'initialisation du type / classe a échoué. Cela se produit généralement lorsqu'il existe une exception dans le constructeur de la classe. La raison la plus courante est que vous attribuez une valeur dans la lecture du constructeur à partir d'un fichier de configuration et que le fichier de configuration ne contient pas ces valeurs.
la source
Dans mon cas, j'ai eu cet échec sur Logger.Créez à l'intérieur d'une bibliothèque de classes qui était utilisée par mon application principale (console). Le problème était que j'avais oublié d'ajouter une référence à NLog.dll dans mon application console. L'ajout de la référence avec la version de bibliothèque .NET Framework correcte a résolu le problème.
la source
Avait un cas comme celui-ci dans un projet WPF. Mon problème était sur une ligne qui ressemblait à ceci:
Où
FillTable()
retourné un DataTable basé sur une chaîne de requête SQL. Si je faisais l'option "copier l'exception dans le presse-papiers", je pense que c'était le cas, et collée dans le Bloc-notes, je pouvais voir le message. Pour moi, ça l'étaitThe input is not a valid Base-64 string as it contains a non-base 64 character
.Mon problème réel n'était pas que la chaîne de requête avait quelque chose qui ne devrait pas être là, comme je le pensais, parce que
string strMySqlQuery = "SELECT * FROM My_Table"
ma chaîne était et pensait que cela pourrait être le*
ou_
, mais le problème réel étaitFillTable()
là, où j'avais un appel à un autre ,GetConnection()
qui a renvoyé unOracleConnection
objet, afin de l'ouvrir et de récupérer et renvoyer le DataTable. À l'intérieur,GetConnection()
j'obtenais lesapp.config
paramètres de ma chaîne de connexion, et j'avais l'un d'eux mal nommé, donc il définissait une valeur nulle pour le mot de passe du compte de service et ne faisait pas la connexion DB. Ce n'est donc pas toujours là où l'erreur est exactement correcte dans toutes les circonstances. Il est préférable de plonger dans la fonction où se trouve l'erreur et de déboguer étape par étape et de vous assurer que toutes les valeurs sont remplies avec ce que vous attendez.la source
Moi aussi, j'ai fait face à cette erreur dans deux situations
Lors de la redirection de la couche BAL vers la couche DAL, j'ai fait face à cette exception. L'exception interne indique que "Erreur de référence d'objet".
Web.Config
la clé de fichier ne correspond pas.J'espère que cela sera utile pour résoudre votre problème.
la source
Semblable à ce que Muhammad Iqbal a déclaré .. J'étais dans un projet VB.NET (peut aussi être C #) où j'ai supprimé une paire clé-valeur du
App.config
qui était référencé par une variable globale auSub Main()
deModule Main
. Par conséquent, l'exception (et la rupture) se produitModule Main
avant leSub Main()
. Si seulement j'avais un point d'arrêt sur leDim
, mais nous ne nous arrêtons généralement pas sur les variables globales. Peut-être une bonne raison de ne pas déclarer des globaux référençant App.config? En d'autres termes, cela ...Est causé par...
App.config
Module principal
la source
Dans mon cas, j'avais une classe d'aide statique. Dans cette classe était une méthode pour initialiser un SqlCommand dépendant des variables. Comme cela était appelé à plusieurs endroits, je l'ai déplacé vers la classe d'assistance et appelé au besoin, donc cette méthode était également statique. Maintenant, j'avais une propriété globale qui était la chaîne de connexion dans Global.asax pointant vers la chaîne de connexion dans web.config. Par intermittence, j'obtenais "L'initialiseur de type pour 'Helper' a levé une exception". Si je déplaçais la méthode de la classe Helper vers la classe où elle était appelée de tous, c'était bien. L'exception interne se plaignait de la nullité de l'objet (classe Helper). Ce que j'ai fait a été d'ajouter Using Helper à Global.asax et même s'il n'était pas utilisé par Global.asax, cela a résolu le problème.
la source
Ma réponse est également liée à la section Config. Si vous affectez des valeurs à partir du fichier de configuration à la classe statique de C # ou Module.VB de VB, vous obtiendrez cette erreur au moment de l'exécution.
add key = "LogPath" value = "~ / Error_Log /"
L'utilisation de la barre oblique dans Web.Config entraîne également cette erreur lors de l'exécution. Je viens de résoudre ce problème en mettant BackSlash
add key = "LogPath" value = "~ \ Error_Log \"
la source
J'ai enveloppé ma ligne qui plantait dans un bloc try-catch, j'ai imprimé l'exception et j'ai rompu immédiatement après son impression. Les informations d'exception affichées avaient une trace de pile qui m'a pointé vers le fichier et la ligne de code provoquant l'erreur.
la source
En quelque sorte, quitter Visual Studio et le rouvrir l'a résolu pour moi.
la source
Les clés du dictionnaire doivent être uniques!
Dans mon cas, j'utilisais un dictionnaire et j'ai trouvé deux éléments qui contenaient accidentellement la même clé.
la source
À noter: j'avais plusieurs projets dans ma solution et j'ai oublié d'ajouter les références / bibliothèques Nuget. Lorsque j'ai exécuté une méthode dans la classe statique, qui utilisait les bibliothèques données, elle a levé l'exception mentionnée.
la source