J'ai une application console .Net Core. Dans la méthode de configuration dans mon startup.cs j'essaye de tester si le débogueur est activé ou non:
if (HttpContext.Current.IsDebuggingEnabled)
loggerFactory.AddConsole(Configuration);
else
loggerFactory.AddConsoleJson(Configuration);
HttpContext.Current.IsDebuggingEnabled
ne semble pas être pris en charge dans le noyau .Net. Je n'ai pas pu trouver une méthode qui fonctionne dans le noyau .net.
System.Diagnostics.DebuggableAttribute.DebuggingModes.Default
ne semble pas fonctionner non plus.
HttpContext
est un autre HttpContext
que celui auquel vous étiez habitué puisque vous utilisez maintenant ASP.NET Core. Cette propriété est introuvable dans la variante ASP.NET Core. Une explication des différences est donnée par poke .
J'utiliserais Debugger.IsAttached
, qui vérifie non seulement si le débogage est activé, mais également en cours de débogage.
HttpContext.Current
fait référence à System.Web.HttpContext
qui fait partie du System.Web
espace de noms utilisé dans l'ancien ASP.NET.
ASP.NET Core n'utilise pas de types dans le System.Web
namespace, et tout ce qui s'appliquait dans l'ancien monde ASP.NET devra être réévalué s'il fonctionne toujours avec les nouveaux types appropriés dans le Microsoft.AspNetCore
espace de noms.
Pour le HttpContext
, le nouveau type est Microsoft.AspNetCore.Http.HttpContext
. Cependant, il n'a pas de propriété IsDebuggingEnabled
qui l'ancien type avait .
La raison en est que l'ancien ASP.NET était une application qui s'exécutait à l'intérieur d'un serveur Web (le plus souvent IIS), et que ce serveur Web fournissait le HttpContext à l'application. Vous avez donc dû utiliser HttpContext.Current
pour accéder à ce contexte.
Dans ASP.NET Core cependant, l'application inclut le serveur Web, ce qui rend les applications ASP.NET Core capables de s'exécuter complètement indépendamment de cela. Maintenant, lors du débogage, au lieu de l'attacher au serveur Web parent, avec ASP.NET Core, vous vous attachez maintenant au processus de l'application ASP.NET Core elle-même. C'est aussi pourquoi vous créez généralement des applications en ligne de commande (qui contiennent le serveur Web avec votre code d'application). Et comme ce sont des applications normales (ligne de commande), vous devrez utiliser les outils standard pour déterminer si le débogueur est connecté ou non.
La manière habituelle pour cela est de vérifier Debugger.IsAttached
pour cela:
if (Debugger.IsAttached)
{
// debugger is attached
}
Cependant, notez que les débogueurs ne sont pas tenus de se joindre à droite lors du lancement d'une application. Il est parfaitement correct de n'attacher le débogueur que plus tard lorsque l'application est déjà en cours d'exécution. Ceci est important car le code de votre Startup
ou de votre WebHostBuilder
ne s'exécutera qu'une seule fois au démarrage de l'application. Il est donc possible que même avec le débogueur attaché, le code qui a enregistré votre fournisseur de journalisation s'exécute à un moment où le débogueur n'était pas encore attaché.