我知道如果把代码标记为DEBUG模式,在RELEASE模式下就不能运行,但它还是会编译成程序集吗? 我只是想确认我的程序集不会因为额外的方法而变得臃肿。
[Conditional(DEBUG)]
private void DoSomeLocalDebugging()
{
//debugging
}
我知道如果把代码标记为DEBUG模式,在RELEASE模式下就不能运行,但它还是会编译成程序集吗? 我只是想确认我的程序集不会因为额外的方法而变得臃肿。
[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
等方法呢?
不可否认,当你构建私有方法时,不包括DEBUG符号可能更合适,但正如你所看到的,它仍然被构建了,这对于简洁性和一致性来说也是合理的。