System.Web.HttpContext.Current.IsDebuggingEnabled
和System.Diagnostics.Debugger.IsAttached
之间是否存在差异?
如果是这样,除了一个仅用于Web应用程序而另一个用于所有类型的项目这一事实之外,还有哪些确切的区别呢?
答案 0 :(得分:19)
HttpContext.IsDebuggingEnabled
是关于web.config中的编译设置。 Debugger.IsAttached
定义是否实际上有一个活动调试器正在侦听来自Web服务器的信息。
请参阅DotnetPerls关于HttpContext.IsDebuggingEnabled
:
调试模式不是默认模式。 ...如果未在Web.config中设置debug =“true”,则以发布模式编译站点。
关于您的问题,为什么第一个'仅适用于Web应用程序':Web应用程序能够在运行时进行编译,而所有其他.NET产品都是预编译的。因此,您可以在web.config中定义构建是在Debug或Release模式下完成的。这是一个仅限ASP.NET的选项,因此该属性仅在那里可用。
作为对第二个问题的回答,为什么第一个选项仅适用于ASP.NET:Windows应用程序还有一种方法可以检查其构建状态:通过DebuggableAttribute
中的说明检查How to check if an assembly was built using Debug or Release configuration? }}
答案 1 :(得分:6)
IsDebuggingEnabled
指的是“调试模式”,这并不一定意味着实际附加了调试器。您可以通过在<compilation debug="true">
文件中设置web.config
将ASP.NET网站设置为调试模式。
当网站处于调试模式时,JIT优化不会应用于视图文件(.aspx,.cshtml等)中包含的代码以及任何运行时编译的代码隐藏文件或App_Code
目录。还有其他影响。