我有一个叫做LocalConstants ....的课程。
public static class LocalConstants {
public static string DM_PATH = ConfigurationManager.AppSettings["DMQueue"];
public static string PROJECT_PATH = ConfigurationManager.AppSettings["MSQueue"];
}
当我尝试在我的主程序中访问此类时,我得到一个空引用异常。 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";
我得到了同样的例外
有什么想法吗?
答案 0 :(得分:5)
首先,如果您这样做是为了提供某种性能优势,那么您应该知道这些是缓存的。请参阅ConfigurationManager.AppSettings Caching,删除任何内容。
其次,问题很可能是Static field initialization无法按预期发挥作用。因此,您编写的代码无法保证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 - 追求那些追随者]
看起来The type initializer for ‘SomeClass’ threw an exception可能是
的情况但是当它由WPF设计者调用时,“应用程序”是Visual Studio,它(可能)在其.config文件中没有相应的连接字符串;
该作者的修正是:
将我的实体数据模型的实例化移动到属性
答案 1 :(得分:1)
为什么不尝试这样的事情:
public static string ProjectPath
{
get
{
return ConfigurationManager.AppSettings["MSQueue"];
}
}
答案 2 :(得分:0)
我打电话给这个
public static string Environment = AppEnvironmentVariable.ToUpper() != "PROD" ? "***FROM " + AppEnvironmentVariable.ToUpper() + "** " : "";
在此之前
public static string AppEnvironmentVariable = "DEV";
在LocalConstants文件中,由于Josh所说的静态字段初始化
而破坏了它答案 3 :(得分:-1)
您可以尝试制作readonly
public static readonly string PROJECT_PATH = ConfigurationManager.AppSettings["MSQueue"];
readonly
字段可以延迟加载