.NET控制台应用程序无法在发布版本中执行类字段初始化行

时间:2017-12-06 19:43:25

标签: c# .net console-application

我有一个.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中提供此行为。

我觉得它好像以前工作正常,但在某些时候这个问题就开始了。

0 个答案:

没有答案