IsDebuggingEnabled和Debugger.IsAttached之间有什么区别

时间:2014-09-03 07:26:47

标签: c# asp.net .net

System.Web.HttpContext.Current.IsDebuggingEnabledSystem.Diagnostics.Debugger.IsAttached之间是否存在差异?

如果是这样,除了一个仅用于Web应用程序而另一个用于所有类型的项目这一事实之外,还有哪些确切的区别呢?

2 个答案:

答案 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目录。还有其他影响。

相关问题