'MyClass'的类型初始值设定项引发了异常

时间:2010-12-09 12:46:24

标签: c# windows-services

以下是我的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();
                }
            }
        }
    }
}

22 个答案:

答案 0 :(得分:317)

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

答案 1 :(得分:168)

如果某个类试图在 web.config app.config 中获取某个键的值,则可能会导致此问题,那里不存在。

e.g。
 该类有一个静态变量

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

web.config 不包含GoogleCalendarApplicationClientID密钥

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

上抛出

答案 2 :(得分:53)

The type initializer for 'CSMessageUtility.CSDetails' threw an exception.表示该类上的静态构造函数引发了一个Exception - 因此您需要查看CSDetails类的静态构造函数,或者查找该类的任何静态成员的初始化。

答案 3 :(得分:5)

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

问题在于,在类的静态初始化期间(使用静态构造函数),框架还初始化类中的静态变量(字段)。我有一个静态变量尝试从app.config读取值,app.config缺少相应的设置,因此导致未处理的异常。这导致“对象引用未设置为对象的实例”。作为内在的例外。

答案 4 :(得分:3)

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

答案 5 :(得分:3)

由于有两个相同的配置属性(与app.config匹配),我遇到了同样的问题:

    [ConfigurationProperty("TransferTimeValidity")]

答案 6 :(得分:2)

可能导致此问题的另一种情况是,您有一段代码调用:

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文件中。

答案 7 :(得分:2)

如果您的依赖项属性已注册到错误的所有者类型(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));
}

答案 8 :(得分:1)

如果由于某种原因导致电源耗尽或Visual Studio IDE崩溃,则可能会导致bin / debug bin / release中出现此问题......

只需删除内容并重新编译(根据我的脚趾点击重置按钮时的个人经验!)

答案 9 :(得分:1)

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

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

只需声明该部分,错误应自行解决。

答案 10 :(得分:1)

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

的运行时版本

答案 11 :(得分:0)

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

答案 12 :(得分:0)

字典键应该唯一!

在我的情况下,我使用的是Dictionary,但我发现其中的两个项目意外地具有相同的密钥。

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

答案 13 :(得分:0)

如错误所述,类型/类的初始化失败。当类的构造函数中存在某些异常时,通常会发生这种情况。最常见的原因是您在构造函数中分配了一些值,该值是从配置文件读取的,而配置文件缺少这些值。

答案 14 :(得分:0)

以某种方式退出Visual Studio并重新打开它为我解决了这个问题。

答案 15 :(得分:0)

我将崩溃的行包装在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.

答案 16 :(得分:0)

我的答案也与“配置”部分有关。如果从静态文件C#或VB的Module.VB的Config文件中分配值,则在运行时会出现此错误。

添加key =“ LogPath”值=“〜/ Error_Log /”

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

添加key =“ LogPath”值=“〜\ Error_Log \”

答案 17 :(得分:0)

就我而言,我有一个静态的帮助类。在该类中是一个初始化依赖于变量的SqlCommand的方法。由于这是在几个地方调用的,我将它移动到helper类并根据需要调用,因此这个方法也是静态的。现在我有了一个全局属性,它是Global.asax中的连接字符串,指向web.config中的连接字符串。间歇性地我会得到“'Helper'的类型初始化器引发异常”。如果我将方法从Helper类移动到从all调用它的类是好的。内部异常抱怨对象为null(Helper类)。我所做的是将Using Helper添加到Global.asax,即使它没有被Global.asax使用,这也解决了这个问题。

答案 18 :(得分:0)

类似于Muhammad Iqbal所说的......我在VB.NET(也可能是C#)项目中,我从App.config删除了一个键值对,该键对由变量global引用到Sub Main()的{​​{1}}。因此,异常(和中断)发生在Module Main之前Module Main。如果我在Sub Main()上只有一个断点,但我们通常不会打破全局变量。也许有理由不声明全局引用App.config?换句话说,这......

  

未处理的类型&#39; System.TypeInitializationException&#39;发生在未知模块中。   “Namespace.Main”的类型初始值设定项&#39;抛出异常。

是由......引起的。

的App.config

Dim

主要模块

<connectionStrings>
    <!--<add name="ConnectionString1" connectionString="..." />-->

答案 19 :(得分:0)

我在两种情况下也遇到了这个错误

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

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

  3. 希望这对解决您的问题很有用。

答案 20 :(得分:0)

在WPF项目中有这样的情况。我的问题就是这样:

DataTable myTable = FillTable(strMySqlQuery);

FillTable()基于SQL查询字符串返回DataTable的位置。如果我将&#34;复制例外复制到剪贴板&#34;选项,我认为是,并粘贴到记事本中,我可以看到该消息。对我来说,它是The input is not a valid Base-64 string as it contains a non-base 64 character

我的实际问题不是查询字符串有一些不应该存在的东西,就像我在想的那样,因为string strMySqlQuery = "SELECT * FROM My_Table"是我的字符串,并认为它可能是{{1} }或*,但实际问题出在_,我调用另一个函数FillTable(),返回一个GetConnection()对象,以便打开它检索并返回DataTable。在OracleConnection内部,我获取了连接字符串的GetConnection()参数,并且其中一个名称错误,因此它为服务帐户的密码设置了空值而没有创建数据库连接。因此,并非所有情况下错误完全正确的地方。最好深入了解错误的功能并逐步调试,并确保所有值都满足您的期望。

答案 21 :(得分:0)

在我的情况下,我在我的主(控制台)应用程序正在使用的类库中的Logger.Create上失败了。问题是我忘记在我的控制台应用程序中添加对NLog.dll的引用。使用正确的.NET Framework库版本添加引用可以解决问题。