【问题标题】: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 方法时,不包含它是有意义的 - 但正如您所见,它仍然是 构建的 - 这为简单起见是合理的和一致性。