如何在ASP.NET中仅在调试模式下执行代码

36

我有一个ASP.NET Web应用程序,我有一些代码只想在调试版本中执行。如何实现?

3个回答

76
#if DEBUG
your code
#endif

您还可以向仅在调试模式下构建时执行的方法中添加ConditionalAttribute

[Conditional("DEBUG")]
void SomeMethod()
{
}

它如何知道自己处于调试状态,是从 web.config 中获取的吗? - Omu
1
@Omu:我添加了MSDN的链接 - 它解释了编译器如何有选择地删除标记为“Conditional”的方法的调用。 - Sam Harwell
1
您可以在发布或调试模式之间选择构建模式。 #if 和条件指令是在编译时使用的。有关更多详细信息,请参阅:http://bytes.com/topic/c-sharp/answers/237540-conditional-debug-if-debug。您可以在谷歌上找到大量相关信息。 - empi
1
@Omu:#if DEBUGConditional("DEBUG") 中的 DEBUG 是定义为 C# 编译器的命令行开关。 - dtb
1
请记住,所有这些都发生在编译时,基于构建配置。如果您需要检查Razor脚本、内联代码,或者当您在web.config中更改“debug”时需要更改行为,则应该使用@dtb的答案。 - James Billingham

64

检测ASP.NET调试模式

if (HttpContext.Current.IsDebuggingEnabled)
{
    // this is executed only in the debug version
}

来自 MSDN:

HttpContext.IsDebuggingEnabled 属性

获取一个值,该值指示当前的 HTTP 请求是否处于调试模式。


1
在MVC 5中,只需使用if (HttpContext.IsDebuggingEnabled) - JohnnyHK

11

我在我的基础页面中声明了一个属性,或者你也可以在应用程序中的任何静态类中声明它:

    public static bool IsDebug
    {
        get
        {
            bool debug = false;
#if DEBUG
            debug = true;
#endif
            return debug;
        }
    }

然后要实现您的愿望,请执行以下操作:

    if (IsDebug)
    {
        //Your code
    }
    else 
    {
        //not debug mode
    }

1
我猜你的意思是: #if DEBUG debug = true; #endif - empi
2
默认情况下,debug将被初始化为false,因此您的IsDebug方法将始终返回false,您是否缺少bool debug = true? - Benny
本地变量没有初始化为任何值,因此当前版本在发布模式下无法编译。 - dtb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接