【发布时间】:2008-12-03 15:05:51
【问题描述】:
我一直在围绕 System.Diagnostics.Debug 的使用进行一些性能测试,似乎所有与静态类 Debug 相关的代码在构建发布配置时都被完全删除。我想知道编译器是如何知道的。也许有一些类或配置属性可以准确地指定该行为。
我正在尝试创建一些我想从 Release 配置中完全删除的调试代码,我想知道我是否可以像 Debug 类那样简单地更改配置参数来删除代码。
【问题讨论】:
我一直在围绕 System.Diagnostics.Debug 的使用进行一些性能测试,似乎所有与静态类 Debug 相关的代码在构建发布配置时都被完全删除。我想知道编译器是如何知道的。也许有一些类或配置属性可以准确地指定该行为。
我正在尝试创建一些我想从 Release 配置中完全删除的调试代码,我想知道我是否可以像 Debug 类那样简单地更改配置参数来删除代码。
【问题讨论】:
您可以将带有字符串“DEBUG”的ConditionalAttribute 属性应用于任何方法,并且对该项目的调用只会出现在 DEBUG 版本中。
这与使用 #ifdef 方法不同,因为它允许您发布方法以供其他人在其 DEBUG 配置中使用(如 .NET 框架中的 Debug 类方法)。
【讨论】:
Visual Studio 为 Debug 配置定义了一个 DEBUG 常量,您可以使用它来包装您不想在 Release 构建中执行的代码:
#ifdef DEBUG
// Your code
#endif
但是,您也可以使用 Conditional 属性装饰方法,这意味着永远不会为非调试构建调用该方法(该方法和任何调用站点都将从程序集中删除):
[Conditional("DEBUG")]
private void MyDebugMethod()
{
// Your code
}
【讨论】:
#if DEBUG
//code
#endif
【讨论】: