Résoudre les problèmes et effectuer le débogage des projets ASP.NET Core
Par Rick Anderson
Les liens suivants fournissent des conseils de résolution des problèmes :
- Résoudre les problèmes liés à ASP.NET Core sur Azure App Service et IIS
- Conférence NDC (Londres, 2018) : Diagnostic des problèmes dans les applications ASP.NET Core
- Blog ASP.NET : Résolution des problèmes de performances ASP.NET Core
Avertissements kit SDK .NET Core
Les versions 32 bits et 64 bits du kit SDK .NET Core sont installées
Dans la boîte de dialogue Nouveau projet pour ASP.NET Core, vous pouvez voir l’avertissement suivant :
Les versions 32 bits et 64 bits du kit SDK .NET Core sont installées. Seuls les modèles des versions 64 bits installées dans « C:\Program Files\dotnet\sdk\ » sont affichés.
Cet avertissement s’affiche lorsque les versions 32 bits (x86) et 64 bits (x64) du kit SDK .NET Core sont installées. Les raisons courantes pour lesquelles les deux versions peuvent être installées sont les suivantes :
- Vous avez initialement téléchargé le programme d’installation du kit SDK .NET Core à l’aide d’un ordinateur 32 bits, puis l’avez copié sur un ordinateur 64 bits et l’avez installé sur un ordinateur 64 bits.
- Le kit SDK .NET Core 32 bits a été installé par une autre application.
- La version incorrecte a été téléchargée et installée.
Désinstallez le kit SDK .NET Core 32 bits pour empêcher cet avertissement. Désinstaller à partir du Panneau de configuration>Programmes et fonctionnalités>Désinstaller ou modifier un programme. Si vous comprenez pourquoi l’avertissement se produit et ses implications, vous pouvez ignorer l’avertissement.
Le kit SDK .NET Core est installé à plusieurs emplacements
Dans la boîte de dialogue Nouveau projet pour ASP.NET Core, vous pouvez voir l’avertissement suivant :
Le kit SDK .NET Core est installé à plusieurs emplacements. Seuls les modèles à partir des SDK installés dans « C:\Program Files\dotnet\sdk\ » sont affichés.
Ce message s’affiche lorsque vous avez au moins une installation du kit SDK .NET Core dans un répertoire en dehors de C:\Program Files\dotnet\sdk\. Cela se produit généralement lorsque le kit SDK .NET Core a été déployé sur un ordinateur à l’aide du copier/coller au lieu du programme d’installation MSI.
Désinstallez tous les runtimes et sdk .NET Core 32 bits pour empêcher cet avertissement. Désinstaller à partir du Panneau de configuration>Programmes et fonctionnalités>Désinstaller ou modifier un programme. Si vous comprenez pourquoi l’avertissement se produit et ses implications, vous pouvez ignorer l’avertissement.
Aucun sdk .NET Core n’a été détecté
Dans la boîte de dialogue Nouveau projet de Visual Studio pour ASP.NET Core, vous pouvez voir l’avertissement suivant :
Aucun kit SDK .NET Core n’a été détecté. Vérifiez qu’ils sont inclus dans la variable d’environnement
PATH
.Lors de l’exécution d’une commande
dotnet
, l’avertissement s’affiche comme suit :Impossible de trouver des SDK dotnet installés.
Ces avertissements s’affichent lorsque la variable d’environnement PATH
ne pointe vers aucun kit SDK .NET Core sur l’ordinateur. Pour résoudre ce problème :
- Installez le SDK .NET Core. Obtenez le dernier programme d’installation à partir des téléchargements .NET.
- Vérifiez que la variable d’environnement
PATH
pointe vers l’emplacement où le SDK est installé (C:\Program Files\dotnet\
pour 64 bits/x64 ouC:\Program Files (x86)\dotnet\
pour 32 bits/x86). Le programme d’installation du SDK définit normalementPATH
. Installez toujours les mêmes nombres de bits SDK et runtimes sur la même machine.
SDK manquant après l’installation de l’offre groupée d’hébergement .NET Core
L’installation de l’offre groupée d’hébergement .NET Core modifie le lors de l’installation PATH
du runtime .NET Core pour qu’il pointe vers la version 32 bits (x86) de .NET Core (C:\Program Files (x86)\dotnet\
). Cela peut entraîner des SDK manquants lorsque la commande .NET Core dotnet
32 bits (x86) est utilisée (aucun kit SDK .NET Core n’a été détecté). Pour résoudre ce problème, passez C:\Program Files\dotnet\
à une position avant C:\Program Files (x86)\dotnet\
sur PATH
.
Obtenir des données à partir d’une application
Si une application est capable de répondre aux demandes, vous pouvez obtenir les données suivantes à partir de l’application à l’aide d’un intergiciel :
- Requête : Méthode, schéma, hôte, base du chemin, chemin d’accès, chaîne de requête, en-têtes
- Connexion : adresse IP distante, port distant, adresse IP locale, port local, certificat client
- Identity: Nom, nom d’affichage
- Paramètres de configuration
- Variables d'environnement
Placez le code d’intergiciel suivant au début du pipeline de traitement des requêtes de la méthode Startup.Configure
. L’environnement est vérifié avant l’exécution de l’intergiciel pour s’assurer que le code est exécuté uniquement dans l’environnement de développement.
Pour obtenir l’environnement, utilisez l’une des approches suivantes :
Injectez
IHostingEnvironment
dans la méthodeStartup.Configure
et vérifiez l’environnement avec la variable locale. L’exemple de code suivant démontre cette approche.Affectez l’environnement à une propriété dans la classe
Startup
. Vérifiez l’environnement à l’aide de la propriété (par exemple,if (Environment.IsDevelopment())
).
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
IConfiguration config)
{
if (env.IsDevelopment())
{
app.Run(async (context) =>
{
var sb = new StringBuilder();
var nl = System.Environment.NewLine;
var rule = string.Concat(nl, new string('-', 40), nl);
var authSchemeProvider = app.ApplicationServices
.GetRequiredService<IAuthenticationSchemeProvider>();
sb.Append($"Request{rule}");
sb.Append($"{DateTimeOffset.Now}{nl}");
sb.Append($"{context.Request.Method} {context.Request.Path}{nl}");
sb.Append($"Scheme: {context.Request.Scheme}{nl}");
sb.Append($"Host: {context.Request.Headers["Host"]}{nl}");
sb.Append($"PathBase: {context.Request.PathBase.Value}{nl}");
sb.Append($"Path: {context.Request.Path.Value}{nl}");
sb.Append($"Query: {context.Request.QueryString.Value}{nl}{nl}");
sb.Append($"Connection{rule}");
sb.Append($"RemoteIp: {context.Connection.RemoteIpAddress}{nl}");
sb.Append($"RemotePort: {context.Connection.RemotePort}{nl}");
sb.Append($"LocalIp: {context.Connection.LocalIpAddress}{nl}");
sb.Append($"LocalPort: {context.Connection.LocalPort}{nl}");
sb.Append($"ClientCert: {context.Connection.ClientCertificate}{nl}{nl}");
sb.Append($"Identity{rule}");
sb.Append($"User: {context.User.Identity.Name}{nl}");
var scheme = await authSchemeProvider
.GetSchemeAsync(IISDefaults.AuthenticationScheme);
sb.Append($"DisplayName: {scheme?.DisplayName}{nl}{nl}");
sb.Append($"Headers{rule}");
foreach (var header in context.Request.Headers)
{
sb.Append($"{header.Key}: {header.Value}{nl}");
}
sb.Append(nl);
sb.Append($"Websockets{rule}");
if (context.Features.Get<IHttpUpgradeFeature>() != null)
{
sb.Append($"Status: Enabled{nl}{nl}");
}
else
{
sb.Append($"Status: Disabled{nl}{nl}");
}
sb.Append($"Configuration{rule}");
foreach (var pair in config.AsEnumerable())
{
sb.Append($"{pair.Path}: {pair.Value}{nl}");
}
sb.Append(nl);
sb.Append($"Environment Variables{rule}");
var vars = System.Environment.GetEnvironmentVariables();
foreach (var key in vars.Keys.Cast<string>().OrderBy(key => key,
StringComparer.OrdinalIgnoreCase))
{
var value = vars[key];
sb.Append($"{key}: {value}{nl}");
}
context.Response.ContentType = "text/plain";
await context.Response.WriteAsync(sb.ToString());
});
}
}
Déboguer des applications ASP.NET Core
Les liens suivants fournissent des informations sur le débogage ASP.NET Core applications.