我上课了:
public class Constant
{
public static string ConnString = ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
}
会在LIVE上抛出异常:Constant ctor
的类型初始化失败如果我将课程改为:
public class Constant
{
public static string ConnString
{
get
{
return ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
}
}
}
它有效。我浪费了2个小时,但我仍然不知道为什么会这样。有什么想法吗?
注意:第一类曾经在DEV环境中工作但在LIVE上没有。第二类适用于DEV和生产。
我在生产和Asp.Net 4.0网站项目中使用VS2010。
至少可以说,我对这种不一致感到惊讶!
修改:此课程位于App_Code
文件夹中。
答案 0 :(得分:2)
我认为主要区别在于:
Constant
类时计算的ConnString
属性(因此可能初始化阶段已完成)答案 1 :(得分:1)
显然这一行
ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString
将在LIVE上抛出异常。
在第一种情况下,这会发生在类构造函数中,因此类型初始化失败。
在第二种情况下,异常会延迟,直到您使用该属性。
答案 2 :(得分:0)
可能由于某种原因,在第一个示例中初始化Constant时,ConfigurationManager未初始化。但是,Class 2将在ConfigurationManager实际需要时获取属性,而不是在初始化Constant类时获取属性。