1

私はクラスを持っていました:

public class Constant
{

    public static string ConnString = ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
}

LIVEで例外をスローします:定数ctorの型の初期化に失敗しました

クラスを次のように変更すると:

public class Constant
{
    public static string ConnString
    {
        get
        {
            return ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
        }
    }
}

できます。これで2時間無駄にしましたが、なぜこれが起こるのかまだわかりません。何か案は?

注: 1st クラスは DEV 環境で動作していましたが、LIVE 環境では動作していませんでした。2 番目のクラスは、DEV と本番環境で動作します。

私は本番環境と Asp.Net 4.0 Web サイト プロジェクトで VS2010 を使用しています。

控えめに言っても、この矛盾に私は完全に驚いています!

編集:このクラスはApp_Codeフォルダーにありました。

4

3 に答える 3

2

主な違いは次のとおりだと思います。

  • Constant最初のものは、クラスが初期化されるときに計算されます
  • ConnString2 番目は、最初にプロパティにアクセスしたときに評価されます (そのため、おそらく初期化フェーズは完了しています)。
于 2012-06-19T14:52:52.467 に答える
1

どうやらこの線

ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString

LIVE で例外をスローします。

ただし、最初のケースでは、これはクラス コンストラクターで発生するため、型の初期化は失敗します。

2 番目のケースでは、プロパティを使用するまで例外が遅延されます。

于 2012-06-19T14:53:06.393 に答える
0

何らかの理由で、最初の例で Constant が初期化されたときに ConfigurationManager が初期化されなかった可能性があります。ただし、クラス 2 は、Constant クラスが初期化されたときではなく、実際に必要になったときに ConfigurationManager でプロパティをフェッチします。

于 2012-06-19T14:55:08.593 に答える