我一直在使用System.Diagnostics.Debug进行一些性能测试,似乎在构建Release配置时,所有与静态类Debug相关的代码都被完全删除了。我想知道编译器是如何知道的。也许有一些类或配置属性允许准确指定该行为。
我正在尝试创建一些我希望从Release配置中完全删除的调试代码,我想知道我是否可以像Debug类那样只需更改配置参数就可以删除代码。
答案 0 :(得分:19)
您可以将ConditionalAttribute属性和字符串“DEBUG”应用于任何方法,并且对该项目的调用将仅出现在DEBUG构建中。
这与使用#ifdef方法不同,因为这允许您在其DEBUG配置中释放供其他人使用的方法(如.NET框架中的Debug类方法)。
答案 1 :(得分:17)
Visual Studio为Debug配置定义了一个DEBUG常量,您可以使用它来包装您不希望在Release版本中执行的代码:
#ifdef DEBUG
// Your code
#endif
但是,您也可以使用Conditional属性修饰方法,这意味着永远不会为非Debug构建调用该方法(该方法和任何调用站点将从程序集中删除):
[Conditional("DEBUG")]
private void MyDebugMethod()
{
// Your code
}
答案 2 :(得分:1)
查看preprocessor directives ...
#if DEBUG
//code
#endif