【问题标题】:Conditional DEBUG - Does it still compile into RELEASE code?条件调试 - 它仍然编译成 RELEASE 代码吗?
【发布时间】:2011-03-29 11:42:44
【问题描述】:

我知道如果我将代码标记为 DEBUG 代码,它不会在 RELEASE 模式下运行,但它仍然会被编译成程序集吗?我只是想确保我的程序集不会因额外的方法而臃肿。

[Conditional(DEBUG)]
private void DoSomeLocalDebugging()
{
   //debugging
}

【问题讨论】:

    标签: c# debugging visual-studio-2010 conditional-compilation


    【解决方案1】:

    是的,无论您如何编译,方法本身仍然构建的。

    这完全合乎逻辑——因为Conditional 的意义在于依赖于构建调用者 时定义的预处理器符号,而不是构建被调用者 时定义的预处理器符号。

    简单测试 - 构建这个:

    using System;
    using System.Diagnostics;
    
    class Test
    {
        [Conditional("FOO")]
        static void CallMe()
        {
            Console.WriteLine("Called");
        }
    
        static void Main()
        {
            CallMe();
        }
    }
    

    运行代码(不定义 FOO),您会看到没有输出,但如果您查看 Reflector,您会看到该方法仍然存在。

    换一种说法:你认为.NET发布的程序集(我们编译的程序集)是用定义的DEBUG符号构建的吗?如果他们不是(我强烈怀疑他们不是!)我们怎么能打电话给Debug.Assert 等?

    诚然,当您构建 private 方法时,不包含它是有意义的 - 但正如您所见,它仍然是 构建的 - 这为简单起见是合理的和一致性。

    【讨论】:

      猜你喜欢
      • 2018-02-01
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-02
      相关资源
      最近更新 更多