条件DEBUG - 它是否仍然编译成RELEASE代码?

m-y*_*m-y 6 c# debugging conditional-compilation visual-studio-2010

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

[Conditional(DEBUG)]
private void DoSomeLocalDebugging()
{
   //debugging
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 11

是的,无论你编译,方法本身仍然构建的.

这完全是逻辑上的 - 因为要点Conditional是依赖于在构建调用者时定义的预处理器符号,而不是在构建被调用者时.

简单的测试 - 建立这个:

using System;
using System.Diagnostics;

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

    static void Main()
    {
        CallMe();
    }
}
Run Code Online (Sandbox Code Playgroud)

运行代码(没有定义FOO)你会看到没有输出,但是如果你看一下Reflector,你会看到方法仍然存在.

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

不可否认,当您构建私有方法时,不包含它是有意义的 - 但正如您所看到的,它仍然构建的 - 这对于简单性和一致性是合理的.