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

gof*_*net 208 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();
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Fre*_*örk 332

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

  • 感谢FredrikMörk我得到了内部异常"对象引用未设置为对象的实例".我在检查它 (4认同)
  • @ gofor.net:正如@Jackson Pope指出的那样; 代码中有趣的部分是类`CSMessageUtility.CSDetails`中的`static CSDetails`方法(以及它可能调用的任何方法).如果你没有找到你自己的问题,更新与该代码的问题. (2认同)
  • 该例外并不总是有效或指向正确的问题.对我来说,它试图告诉我`输入不是一个有效的Base-64字符串,因为它包含一个函数返回给DataTable对象的非基础64字符`,但对我来说,实际上存在一个潜在的问题我用错误的名称调用`app.config`参数,所以我用来形成我的连接字符串的变量为null.因此,无法在该函数中打开`OracleConnection`以返回DataTable.最好的建议是深入了解返回错误的基础函数. (2认同)

Muh*_*bal 178

如果类试图获取web.configapp.config中不存在的键的值,则可能导致此问题.

例如
,该类有一个静态变量

private static string ClientID = System.Configuration.ConfigurationSettings.AppSettings["GoogleCalendarApplicationClientID"].ToString();
Run Code Online (Sandbox Code Playgroud)

但是web.config不包含GoogleCalendarApplicationClientID密钥

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

  • 男人,我永远不会发现自己.我过分依赖点积分,唉,他们不会救我.谢谢芽!+1 (23认同)
  • 我同意 ...我刚刚完成同样的事情.拉着我的头发试图搞清楚.非常感谢! (7认同)
  • 在我的情况下它是连接字符串. (3认同)
  • 你这个摇滚人!你是救世主!如果没有丢失的配置条目,引用的项目甚至没有调试(进入)。如果不深入了解该代码,就没有任何线索可以与配置问题相关联。在我浪费了 2 天之后,您挽救了我的一周:P! (2认同)

Jac*_*ope 55

The type initializer for 'CSMessageUtility.CSDetails' threw an exception. 表示该类上的静态构造函数抛出异常 - 因此您需要查看CSDetails类的静态构造函数,或者查找该类的任何静态成员的初始化.


Tha*_*aka 5

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

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