'MyClass'のタイプ初期化子が例外をスローしました


217

以下は、私の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();
                }
            }
        }
    }
}

5
静的メンバーの初期化を確認してください。
ロビノ2014年

回答:


350

InnerExceptionプロパティを確認しますTypeInitializationException。根本的な問題に関する情報と、それが発生した正確な場所が含まれている可能性があります。


4
おかげでFredrikMörk私は内部例外「オブジェクト参照がオブジェクトのインスタンスに設定されていません」を受け取りました。私はそれをチェックしています
gofor.net

2
@ gofor.net:@Jackson Popeが指摘するように; コードの興味深い部分はstatic CSDetails、クラス内のCSMessageUtility.CSDetailsメソッド(およびそれが呼び出す可能性のあるすべてのメソッド)です。自分で問題を見つけられない場合は、そのコードで質問を更新してください。
FredrikMörk10年

実際にCSMessageUtilityは私が使用しているdll参照であり、これにはいくつかのメソッドが含まれています。しかし、これらのメソッドを手動でチェックしたところ、エラーは発生しませんでした。完全に機能します
gofor.net

2
例外は常に有効であるとは限らず、正しい問題を示しているとは限りません。私The input is not a valid Base-64 string as it contains a non-base 64 characterにとっては、関数がDataTableオブジェクトに返すものを教えようとしましたが、実際にはapp.config、間違った名前でパラメーターを呼び出すという根本的な問題があったため、接続文字列を形成するために使用していた変数ヌルだった。したがってOracleConnection、DataTableを返すためにその関数でを開くことができませんでした。最善のアドバイスは、エラーを返している基になる関数に飛び込むことです。
vapcguy

186

この問題は、クラスがweb.configまたはapp.configに存在しないキーの値を取得しようとした場合に発生する可能性があります。


:クラスには静的変数があります

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

しかし、web.configにGoogleCalendarApplicationClientIDキーが含まれていません

エラーは、静的関数呼び出しまたはクラスインスタンスの作成時にスローされます。


24
自分でそれを見つけたことはないだろう。私はポイントブレークに頼りすぎていたので、悲しいかな、彼らは私を救いませんでした。芽をありがとう!+1
ルーカス2013

7
同意する 。。。まったく同じことが起こった。それを理解しようとして私の髪を引っ張っていました。どうもありがとう!
dscarr 2015年

3
私の場合は接続文字列でした。
Musakkhir Sayyed、2016

1
あなたはロックマンです!あなたは救世主です!参照されたプロジェクトは、configエントリーが欠落していないとデバッグ(ステップイン)することさえできませんでした。そのコードに侵入せずに構成の問題に関連する手掛かりはありませんでした。私が2日間無駄にした後、あなたは私の1週間を救った:P
Pramod Sharma

1
@MuhammadWaqasIqbal最後の太字の文が鍵です!!! ClientIDこの例で使用するすべての関数にこのエラーがあります。素晴らしいポスト。
vapcguy

57

The type initializer for 'CSMessageUtility.CSDetails' threw an exception. は、そのクラスの静的コンストラクターが例外をスローしたことを意味します。つまり、CSDetailsクラスの静的コンストラクター、またはそのクラスの静的メンバーの初期化を調べる必要があります。


1
案の定。問題を引き起こしていたlog4netロガーの静的インスタンスを作成していました。問題は、そのプロジェクトのlog4netアセンブリのバージョンが、他のプロジェクトのバージョンと一致していなかった(シヴァンが具体的に指摘したことに気付いた)
goku_da_master

1
NLogを使用して同じ問題が発生しました。私は静的コンストラクターでロガーを初期化する傾向があり、異なるプロジェクトのバージョン間の不一致が問題の原因でした。どこでも同じバージョンを使用すると問題が解決しました。
shelbypereira 2016年

5

「CSMessageUtility.CSDetails」を使用したのと同じように、Utilクラスで静的メソッドを使用していたときに、同じ問題に遭遇しました。

問題は、(静的コンストラクターを使用した)クラスの静的初期化中に、フレームワークがクラ​​スの静的変数(フィールド)も初期化することでした。app.configから値を読み取ろうとする静的変数があり、app.configにそれぞれの設定がないため、未処理の例外が発生しました。これにより、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」が発生しました。内部例外として。


3

これらの初期化エラーがスローされたときに確認するもう1つのことは、ターゲットの.NETバージョンがサーバーにインストールされているかどうかを確認することです。プロジェクトを右クリックして、アプリケーションが対象としている.NETバージョンを確認できます。


3

2つの同じ構成プロパティ(app.configと一致する)が原因で同じ問題が発生しました。

    [ConfigurationProperty("TransferTimeValidity")]

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ファイルに構成設定を配置します。


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

1

何らかの理由で電源が入った場合、またはVisual Studio IDEがクラッシュした場合、bin / debug bin / release内でこの問題が発生する可能性があります...

コンテンツを削除して再コンパイルするだけです(個人的な経験から、つま先がリセットボタンを押したとき!)


1

私は異なるがまだ関連している構成を持っていました。

configSectionsで宣言されていないカスタム構成セクションである可能性があります。

セクションを宣言するだけで、エラーは自動的に解決します。


1

アセンブリのランタイムバージョン間の不一致が原因でこの問題が発生しました。メインアセンブリ(呼び出し側アプリケーション)および参照されたアセンブリのランタイムバージョンを確認してください


1

エラーが示すように、タイプ/クラスの初期化は失敗しました。これは通常、クラスのコンストラクターに例外がある場合に発生します。最も一般的な理由は、構成ファイルから読み取るコンストラクターにいくつかの値を割り当て、構成ファイルにそれらの値がないことです。


0

私の場合、メイン(コンソール)アプリで使用されていたクラスライブラリ内のLogger.Createでこれが失敗しました。問題は、コンソールアプリにNLog.dllへの参照を追加するのを忘れていたことでした。正しい.NET Frameworkライブラリバージョンで参照を追加すると、問題が修正されました。


0

WPFプロジェクトでこのようなケースがありました。私の問題は次のような行でした:

DataTable myTable = FillTable(strMySqlQuery);

FillTable()SQLクエリ文字列に基づいてDataTableを返した場所。「例外をクリップボードにコピーする」オプションを実行した場合は、それがメモ帳に貼り付けられたと思います。メッセージが表示されました。私にとって、それはでした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それを開いてDataTableを取得して返す関数。内部GetConnection()ではapp.config、接続文字列のパラメーターを取得していて、そのうちの1つに誤った名前が付けられていたため、サービスアカウントのパスワードにnull値を設定し、DB接続を確立していませんでした。したがって、すべての状況でエラーが正確に正しいとは限りません。エラーが発生している関数に飛び込み、段階的にデバッグし、すべての値が期待どおりに満たされていることを確認するのが最善です。


0

私も2つの状況でこのエラーに直面しました

  1. BALレイヤーからDALレイヤーへのリダイレクトを実行しているときに、この例外に直面しました。内部例外で「オブジェクト参照エラー」と表示されます。

  2. Web.Config ファイルキーが一致しません。

これが問題の解決に役立つことを願っています。


0

ムハンマド・イクバールが述べられて何に似て..私はVB.NETにいた私からキーと値のペアを削除したプロジェクト(また、C#の場合もある)App.configに、変数のグローバルで参照されたSub Main()Module Main。したがって、例外(およびブレーク)はのModule Main前に発生しSub Main()ます。にブレークポイントがあったとしてもDim、通常はグローバル変数をブレークしません。おそらく、App.configを参照するグローバルを宣言しないのは良い理由でしょうか。つまり、これは...

タイプ「System.TypeInitializationException」の未処理の例外が不明なモジュールで発生しました。'Namespace.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

0

私の場合、静的なヘルパークラスがありました。そのクラスには、変数に依存するSqlCommandを初期化するメソッドがありました。これがいくつかの場所で呼び出されていたので、ヘルパークラスに移動し、必要に応じて呼び出したため、このメソッドも静的でした。これで、web.configの接続文字列を指すGlobal.asaxの接続文字列であるグローバルプロパティができました。断続的に「ヘルパーの型初期化子が例外をスローしました」と表示されます。メソッドをHelperクラスから、すべてが呼び出されているクラスに移動した場合は問題ありません。内部例外により、オブジェクトがnullであると報告されました(ヘルパークラス)。私がしたことは、Using HelperをGlobal.asaxに追加することでした。Global.asaxで使用されていなくても、これで問題が解決しました。


0

私の回答は構成セクションにも関連しています。C#の静的クラスまたはVBのModule.VBで構成ファイルから値を割り当てると、実行時にこのエラーが発生します。

key = "LogPath" value = "〜/ Error_Log /"を追加します

Web.Configでスラッシュを使用すると、実行時にこのエラーが発生します。私はバックスラッシュを置くことでこの問題を解決しました

key = "LogPath" value = "〜\ Error_Log \"を追加します


0

クラッシュしていた行をtry-catchブロックで囲み、例外を出力して、出力後すぐに改行しました。表示された例外情報にはスタックトレースがあり、ファイルとコード行を示しているため、障害が発生しています。

ここに画像の説明を入力してください

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.


0

辞書キーは一意である必要があります。

私の場合、私は辞書を使用していましたが、その中の2つのアイテムが誤って同じキーを持っていることがわかりました。

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

0

注意:私のソリューションには複数のプロジェクトがあり、参照/ Nugetライブラリを追加するのを忘れていました。特定のライブラリを使用する静的クラスでメソッドを実行すると、上記の例外がスローされました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.