我知道如果我将代码标记为 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
等?
诚然,当您构建私有方法时,不包含它是有意义的 - 但正如您所看到的,它仍然是构建的 - 这对于简单性和一致性来说是合理的。