DaI*_*mTo 19 c# .net-core asp.net-core
我有一个.Net Core控制台应用程序.在我的startup.cs中的configure方法中,我试图测试是否启用了调试器:
if (HttpContext.Current.IsDebuggingEnabled)
loggerFactory.AddConsole(Configuration);
else
loggerFactory.AddConsoleJson(Configuration);
Run Code Online (Sandbox Code Playgroud)
HttpContext.Current.IsDebuggingEnabled在.Net核心中不支持接缝.我还没有找到一个在.net核心中运行的方法.
System.Diagnostics.DebuggableAttribute.DebuggingModes.Default 似乎也不起作用.
Dev*_*ned 12
如果您想在 Debug 中运行一段代码而不是在 Release 中运行,可以使用 #if 预处理器指令。
#if(DEBUG)
debug code here...
#else
release code here...
#endif
Run Code Online (Sandbox Code Playgroud)
如果您不想在构建的发布版本中运行任何内容,只需不要包含 else 块即可。
HttpContext.Current指的System.Web.HttpContext是System.Web旧ASP.NET中使用的命名空间的一部分.
ASP.NET Core不使用System.Web命名空间中的类型,并且需要重新评估在旧ASP.NET世界中应用的任何内容,无论它是否仍适用于Microsoft.AspNetCore命名空间中的相应新类型.
对于HttpContext,新类型是Microsoft.AspNetCore.Http.HttpContext.但是,它没有旧类型的IsDebuggingEnabled属性.
原因是旧的ASP.NET是在Web服务器(最常见的IIS)中运行的应用程序,并且该Web服务器向应用程序提供了HttpContext.所以你必须用来HttpContext.Current访问那个上下文.
但是,在ASP.NET Core中,该应用程序包含 Web服务器,使ASP.NET Core应用程序能够完全独立于此运行.现在,在调试时,您现在将附加到ASP.NET Core应用程序本身的进程,而不是使用ASP.NET Core附加到父Web服务器.这也是您通常创建命令行应用程序(包含带有应用程序代码的Web服务器)的原因.由于它们是普通(命令行)应用程序,因此您必须使用标准工具来确定调试器是否已连接.
通常的方法是检查Debugger.IsAttached:
if (Debugger.IsAttached)
{
// debugger is attached
}
Run Code Online (Sandbox Code Playgroud)
但请注意,在应用程序启动时,调试器不需要正确附加.稍后在应用程序运行时仅附加调试器是完全正常的.这很重要,因为您Startup或您的代码WebHostBuilder只会在应用程序启动时运行一次.因此,即使附加了调试器,注册日志记录提供程序的代码也可能在尚未附加调试器的情况下运行.
| 归档时间: |
|
| 查看次数: |
6587 次 |
| 最近记录: |