tablas soporta segundo porque por optimizar lentas las dañan cuello cuantas consultas con botella c# asp.net-core .net-core

c# - soporta - optimizar consultas sql server



Cómo detectar si se está depurando. (3)

Tengo una aplicación de consola .Net Core. En el método de configuración en mi startup.cs estoy tratando de probar si el depurador está habilitado o no:

if (HttpContext.Current.IsDebuggingEnabled) loggerFactory.AddConsole(Configuration); else loggerFactory.AddConsoleJson(Configuration);

HttpContext.Current.IsDebuggingEnabled no tiene que ser compatible con el núcleo .Net. No he podido encontrar un método que funcione en .net core.

System.Diagnostics.DebuggableAttribute.DebuggingModes.Default no parece funcionar tampoco.


Si desea ejecutar un fragmento de código en Debug y no en Release, puede usar la directiva #if preprocesador.

#if(DEBUG) debug code here... #else release code here... #endif

Si no desea ejecutar nada en la versión de lanzamiento de la compilación, simplemente no incluya el bloque else.


HttpContext.Current refiere a System.Web.HttpContext que forma parte del espacio de nombres System.Web que se utilizó en el antiguo ASP.NET.

ASP.NET Core no usa tipos dentro del espacio de nombres System.Web , y cualquier cosa que se aplique en el mundo antiguo de ASP.NET deberá ser reevaluada si aún funciona con los nuevos tipos apropiados en el espacio de nombres Microsoft.AspNetCore .

Para el HttpContext , el nuevo tipo es Microsoft.AspNetCore.Http.HttpContext . Sin embargo, no tiene una propiedad IsDebuggingEnabled que tenía el tipo anterior .

La razón de esto es que la antigua ASP.NET era una aplicación que se ejecutaba dentro de un servidor web (generalmente IIS), y ese servidor web proporcionaba el HttpContext a la aplicación. Así que tuvo que usar HttpContext.Current para acceder a ese contexto.

Sin embargo, en ASP.NET Core, la aplicación incluye el servidor web, lo que hace que las aplicaciones de ASP.NET Core puedan ejecutarse completamente independientemente de esto. Ahora, al depurar, en lugar de adjuntar al servidor web principal, con ASP.NET Core, ahora se adjunta al proceso de la aplicación ASP.NET Core. Esta es la razón por la que generalmente crea aplicaciones de línea de comandos (que contienen el servidor web con el código de su aplicación). Y debido a que son aplicaciones normales (línea de comando), tendrá que usar las herramientas estándar para averiguar si el depurador está conectado o no.

La forma habitual de esto es verificar Debugger.IsAttached para esto:

if (Debugger.IsAttached) { // debugger is attached }

Sin embargo, tenga en cuenta que no se requiere que los depuradores se adjunten correctamente cuando se inicie una aplicación. Es perfectamente correcto adjuntar el depurador solo más tarde cuando la aplicación ya se está ejecutando. Esto es importante ya que el código en su Startup o su WebHostBuilder solo se ejecutará una vez cuando se inicie la aplicación. Por lo tanto, es posible que incluso con el depurador conectado, el código que registró a su proveedor de registro se ejecutó en un momento en que el depurador aún no estaba conectado.


HttpContext es otro HttpContext al que estaba acostumbrado ya que ahora está usando ASP.NET Core. Esa propiedad no se puede encontrar en la variante Core de ASP.NET. Una explicación de las diferencias se da por poke .

Debugger.IsAttached , que no solo comprueba si la depuración está habilitada, sino que también está siendo depurada activamente.