MyClass'抛出异常

下面是我的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();
}
}
}
}
}
420061 次浏览

The type initializer for 'CSMessageUtility.CSDetails' threw an exception.意味着该类的静态构造函数抛出了一个异常——所以你需要在CSDetails类的静态构造函数中查找,或者在该类的任何静态成员的初始化中查找。

检查TypeInitializationExceptionInnerException属性;它可能包含有关潜在问题的信息,以及问题发生的确切位置。

如果类试图获取< em > web . config < / em >< em > app.config < / em >中不存在的键的值,则会导致此问题。

< p >。< br > 该类有一个静态变量

private static string ClientID = System.Configuration.ConfigurationSettings.AppSettings["GoogleCalendarApplicationClientID"].ToString();

但是. config不包含GoogleCalendarApplicationClientID

该错误将在任何静态函数调用任何类实例创建上抛出

如果由于任何原因断电或Visual Studio IDE崩溃,它会在你的bin/debug bin/release中导致这个问题…

只需删除内容并重新编译(从我的个人经验来看,当我的脚趾碰到复位按钮!)

当我在Util类中使用静态方法时,我遇到了同样的问题,就像你使用CSMessageUtility.CSDetails一样。

问题是在类的静态初始化过程中(使用静态构造函数),框架也初始化了类中的静态变量(字段)。我有一个静态变量,试图从app.config读取值,而app.config缺少相应的设置,从而导致一个未处理的异常。这导致了

“对象引用未设置为对象的实例”;

作为内部异常。

另一种可能导致这种情况的情况是,当你有一段代码调用:

string sParam = **ConfigurationManager.AppSettings["SOME_PARAM"].ToString();

请记住,你必须使用OWSTIMER.EXE.CONFIG文件来进行配置文件设置。我有一个App.config文件,我试图读取,我得到这个错误,因为在实例化我的作业实例时,我在我的代码中有一行引用Connfiguration.AppSettings &Configuration.ConnectionStrings。只要确保你走的是这条路:

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN

并将您的配置设置放在OWSTIMER.EXE.CONFIG文件中。

当抛出这些初始化错误时要检查的另一件事是检查服务器上是否安装了目标. net版本。您可以右键单击该项目并查看应用程序的目标。net版本。

我也遇到过同样的问题,因为有两个相同的配置属性(与app.config匹配):

[ConfigurationProperty("TransferTimeValidity")]

我有一个不同但仍然相关的配置。

可以是在configSections中未声明的自定义配置部分。

只需声明该节,错误就会自行解决。

在我的例子中,我在Logger上失败了。在我的主(控制台)应用程序使用的类库中创建。问题是我忘记在我的控制台应用程序中添加对NLog.dll的引用。添加正确的. net框架库版本的引用解决了这个问题。

由于程序集的运行时版本之间不匹配,我遇到了这个问题。请验证主程序集(调用应用程序)和引用的程序集的运行时版本

在WPF项目中有一个类似的案例。我的问题是这样写的:

DataTable myTable = FillTable(strMySqlQuery);

其中FillTable()返回一个基于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对象,以便打开它并检索并返回数据表。在GetConnection()里面,我得到了我的连接字符串的app.config参数,我有一个错误命名,所以它为服务帐户的密码设置了一个空值,并没有进行DB连接。所以错误并不总是在所有情况下都是正确的。最好深入到错误所在的函数,并逐步调试,并确保所有值都被您所期望的填充。

如果您的依赖项属性注册到错误的所有者类型(ownerType参数),就会发生这种情况。

注意SomeOtherControl应该是YourControl

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));
}

我在两种情况下也犯过这个错误

  1. 在执行从BAL层重定向到DAL层时,我遇到了这个异常。内部异常表示“对象引用错误”。

  2. Web.Config文件密钥不匹配。

希望这对解决你的问题有用。

类似穆罕默德·伊克巴尔所说的…我在一个VB。NET(也可能是c#)项目,其中我确实从App.config中删除了一个键值对,该键值对由一个全局变量引用到Module MainSub Main()。因此,异常(和break)在Module Main中发生在Sub Main()之前。如果我在Dim上有一个断点就好了,但我们通常不会在全局变量上中断。也许一个很好的理由不声明全局引用App.config?换句话说,这个…

System类型的未处理异常。在未知模块中发生TypeInitializationException'。 命名空间的类型初始化式。

. Main'抛出异常

是由……

App.config

<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

在我的例子中,我有一个静态的helper类。在该类中,有一个方法用于初始化依赖于变量的SqlCommand。由于这是在几个地方被调用,我把它移动到助手类,并在需要时调用,所以这个方法也是静态的。现在我有一个全局属性,它是全局中的连接字符串。Asax指向web.config中的连接字符串。我偶尔会得到“‘Helper’的类型初始化器抛出异常”。如果我将方法从Helper类移动到它正在被调用的类,那就很好。内部异常抱怨对象为空(Helper类)。我所做的是将Using Helper添加到全局。asax,即使它没有被全球使用。Asax这就解决了问题。

我的答案也与配置部分有关。如果你在c#的静态类或VB的Module.VB的配置文件中赋值,你会在运行时得到这个错误。

add key="LogPath" value="~/Error_Log/" .

在Web中使用正斜杠。配置在运行时也会导致此错误。我刚刚通过放置反斜杠解决了这个问题

add key="LogPath" value="~\Error_Log\"< em> .

我在try-catch块中包装了即将崩溃的行,打印出异常,并在打印后立即中断。所显示的异常信息具有堆栈跟踪,它将我指向导致故障发生的文件和代码行。

enter image description here

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并重新打开它为我解决了这个问题。

错误提示类型/类初始化失败。这通常发生在类的构造函数中出现异常时。最常见的原因是您在从配置文件读取的构造函数中赋了一些值,而配置文件缺少这些值。

字典键应该是唯一的!

在我的例子中,我正在使用一个字典,我发现其中有两个项目偶然有相同的键。

Dictionary<string, string> myDictionary = new Dictionary<string, string>() {
{"KEY1", "V1"},
{"KEY1", "V2" },
{"KEY3", "V3"},
};

值得注意的是:在我的解决方案中有多个项目,我忘记添加引用/Nuget库。当我在静态类中运行一个使用给定库的方法时,它抛出了上面提到的异常。