10

我有一个名为 LocalConstants 的类....

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

当试图在我的主程序中访问这个类时,我得到一个空引用异常。ConfigurationManager.AppSettings[ 中的任何内容始终为空。但如果我写

  //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.AppSettings 缓存,以删除任何内容。

其次,问题很可能是静态字段初始化无法按照您的预期工作。因此,您编写的代码不能保证 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";

在 LocalConstants 文件中,由于 Josh 所说的静态字段初始化而破坏了它

于 2012-05-15T20:57:55.657 回答
-1

你可以尝试制作它们readonly

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

readonly字段可以延迟加载

于 2012-05-15T19:12:39.600 回答