条件DEBUG – 它是否仍然编译成RELEASE代码?
我知道如果我将代码标记为DEBUG代码,它将不会在RELEASE模式下运行 ,但它是否仍然被编译成程序集? 我只是想通过额外的方法确保我的assembly不会膨胀。
[Conditional(DEBUG)] private void DoSomeLocalDebugging() { //debugging }
是的,无论你编译,方法本身仍然是构建的。
这完全是逻辑上的 – 因为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
等?
无可否认,当您构建私有方法时,不包含它是有意义的 – 但正如您所看到的,它仍然是构建的 – 这对于简单性和一致性是合理的。