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