10

LocalConstantsというクラスがあります。

 public static class LocalConstants {
    public static string DM_PATH = ConfigurationManager.AppSettings["DMQueue"];
    public static string PROJECT_PATH = ConfigurationManager.AppSettings["MSQueue"];
 }

メインプログラムでこのクラスにアクセスしようとすると、null参照例外が発生します。ConfigurationManager.AppSettings[からのすべては常にnullです。しかし、私が書くなら

  //The value is returned fine 
  string bo=ConfigurationManager.AppSettings["MSQueue"];

これは正常にコンパイルされますが、常にnullであり、NullRefexceptionをスローします

   string moomoo = LocalConstants.PROJECT_PATH;

例外は、「TestCodeOutOnSide.LocalConstants」の型初期化子が例外をスローしたことです。

innerExceptionは、オブジェクトのインスタンスに設定されていない基本的なオブジェクト参照です。

PROJECT_PATHをに変更しても

public static readonly string PROJECT_PATH = @"FORMATNAME:DIRECT=OS:serus-nickl\RMQDEV";

同じ例外が発生します

何か案は?

4

4 に答える 4

5

まず、パフォーマンス上の利点を提供するためにこれを実行している場合は、これらがキャッシュされていることを知っておく必要があります。削除するには、ConfigurationManager.AppSettingsCachingを参照してください。

次に、静的フィールドの初期化が期待どおりに機能しない可能性があります。したがって、記述されたコードは、それ ConfigurationManager.AppSettingsが実行されたことを保証するものではありません。リンクされた記事のサンプルコードから:

次のいずれかの出力が生成される可能性があります。

Init A
Init B
1 1

または出力:

Init B
Init A
1 1

[OPコメントごとに編集]

次のような他の何かが関係している必要があります。

public static class LocalConstants
{
    public static string DM_PATH = "DMQueue";
    public static string PROJECT_PATH = "MSQueue";
}


class Program
{
    static void Main(string[] args)
    {
        string moomoo = LocalConstants.PROJECT_PATH;

        Console.WriteLine(moomoo);
    }
}

私のために働く。

[編集2-後に来る人たちから]

'SomeClass'の型初期化子が例外をスローしたようです。

ただし、WPFデザイナーによって呼び出された場合、「アプリケーション」はVisual Studioであり、(おそらく).configファイルに適切な接続文字列がありません。

その作者の修正は次のとおりです。

エンティティデータモデルのインスタンス化をプロパティに移動する

于 2012-05-15T19:05:03.647 に答える
1

次のようなものを試してみませんか:

   public static string ProjectPath 
   { 
       get 
       { 
           return ConfigurationManager.AppSettings["MSQueue"]; 
       } 
   }
于 2016-11-23T16:42:45.593 に答える
0

私はこれを呼んだ

public static string Environment = AppEnvironmentVariable.ToUpper() != "PROD" ? "***FROM " + AppEnvironmentVariable.ToUpper() + "** " : "";

この前に

public static string AppEnvironmentVariable = "DEV";

Joshが静的フィールドの初期化について言ったことのためにそれを壊したLocalConstantsファイルで

于 2012-05-15T20:57:55.657 に答える
-1

あなたはそれらを作ってみることができますreadonly

public static readonly string PROJECT_PATH = ConfigurationManager.AppSettings["MSQueue"];

readonlyフィールドは遅延ロードできます

于 2012-05-15T19:12:39.600 に答える