我有一个.NET控制台应用程序,如下所示:
class Program
{
private static SomeObject obj = Objmanager.GetObject();
private static int foo = 1;
// Other initializations...
static void Main(string[] args)
{
...
// Some code which uses obj;
...
}
}
在Debug版本中,执行private SomeObject obj = Objmanager.GetObject();
行(private int foo = 1;
以及任何其他初始化)以及对obj
的后续引用按预期工作。
在Release版本中,没有任何字段初始化行执行,因此obj
永远不会被初始化,后来对obj
的引用会因NullReferenceException
而失败。我已逐步通过发布代码验证了这一点。
但是,当我访问任何其他变量时,例如foo
,就像这样:
class Program
{
private static SomeObject obj = Objmanager.GetObject();
private static int foo = 1;
// Other initializations...
static void Main(string[] args)
{
...
// Access foo in any way, e.g. foo++;, Console.WriteLine(foo); etc.
Console.WriteLine(foo);
// Some code which uses obj - now it works fine!
Console.WriteLine(obj);
...
}
}
然后执行所有字段初始化行。
如前所述,在Debug中按预期工作但在Release中提供此行为。
我觉得它好像以前工作正常,但在某些时候这个问题就开始了。