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 个小时,但我仍然不知道为什么会发生这种情况。有任何想法吗?

注意:第一堂课以前在 DEV 环境下工作,但不是在 LIVE 上工作。第二类在 DEV 和 Production 上工作。

我在生产和 Asp.Net 4.0 网站项目中使用 VS2010。

至少可以说,我对这种不一致感到非常惊讶!

编辑:这个类在App_Code文件夹中。

4

3 回答 3

2

我认为主要区别在于:

  • 第一个是在Constant类初始化时计算的
  • 第二个是在第一次ConnString访问属性时评估的(所以初始化阶段可能已经完成)
于 2012-06-19T14:52:52.467 回答
1

显然这条线

ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString

将在 LIVE 上引发异常。

然而,在第一种情况下,这发生在您的类构造函数中,因此类型初始化失败。

在第二种情况下,异常会延迟到您使用该属性。

于 2012-06-19T14:53:06.393 回答
0

很可能无论出于何种原因,在第一个示例中初始化 Constant 时,ConfigurationManager 都没有初始化。但是,Class 2 会在实际需要时去获取 ConfigurationManager 中的属性,而不是在初始化您的 Constant 类时。

于 2012-06-19T14:55:08.593 回答