Résoudre les problèmes des projets ASP.NET CoreTroubleshoot ASP.NET Core projects

Par Rick AndersonBy Rick Anderson

Les liens suivants fournissent des conseils de dépannage :The following links provide troubleshooting guidance:

Avertissements du SDK .NET core.NET Core SDK warnings

Les versions 32 bits et 64 bits du SDK .NET Core sont installéesBoth the 32-bit and 64-bit versions of the .NET Core SDK are installed

Dans le nouveau projet boîte de dialogue pour ASP.NET Core, vous pouvez voir l’avertissement suivant :In the New Project dialog for ASP.NET Core, you may see the following warning:

Les versions 32 bits et 64 bits du SDK .NET Core sont installées.Both 32-bit and 64-bit versions of the .NET Core SDK are installed. Seuls les modèles à partir des versions 64 bits installées sur ' C:\Program Files\dotnet\sdk\» sont affichés.Only templates from the 64-bit versions installed at 'C:\Program Files\dotnet\sdk\' are displayed.

Cet avertissement s’affiche lorsque les (x86) 32 bits et les versions 64 bits (x 64) de la du SDK .NET Core sont installés.This warning appears when both 32-bit (x86) and 64-bit (x64) versions of the .NET Core SDK are installed. Raisons courantes, les deux versions peuvent être installées sont les suivantes :Common reasons both versions may be installed include:

  • Vous initialement téléchargé le programme d’installation du SDK .NET Core à l’aide d’un ordinateur 32 bits, mais ensuite copié sur et installé sur un ordinateur 64 bits.You originally downloaded the .NET Core SDK installer using a 32-bit machine but then copied it across and installed it on a 64-bit machine.
  • Le SDK .NET Core de 32 bits a été installé par une autre application.The 32-bit .NET Core SDK was installed by another application.
  • Une version incorrecte a été téléchargée et installée.The wrong version was downloaded and installed.

Désinstaller le SDK 32 bits de .NET Core pour éviter cet avertissement.Uninstall the 32-bit .NET Core SDK to prevent this warning. Désinstaller à partir de le panneau de configuration > programmes et fonctionnalités > désinstaller ou modifier un programme.Uninstall from Control Panel > Programs and Features > Uninstall or change a program. Si vous comprenez pourquoi l’avertissement se produit et ses implications, vous pouvez ignorer l’avertissement.If you understand why the warning occurs and its implications, you can ignore the warning.

Le SDK .NET Core est installé dans plusieurs emplacementsThe .NET Core SDK is installed in multiple locations

Dans le nouveau projet boîte de dialogue pour ASP.NET Core, vous pouvez voir l’avertissement suivant :In the New Project dialog for ASP.NET Core, you may see the following warning:

Le SDK .NET Core est installé dans plusieurs emplacements.The .NET Core SDK is installed in multiple locations. Seuls les modèles à partir de kits de développement logiciel installés à ' C:\Program Files\dotnet\sdk\» sont affichés.Only templates from the SDKs installed at 'C:\Program Files\dotnet\sdk\' are displayed.

Ce message s’affiche lorsque vous avez au moins une installation du SDK .NET Core dans un répertoire en dehors de C:\Program Files\dotnet\sdk\ .You see this message when you have at least one installation of the .NET Core SDK in a directory outside of C:\Program Files\dotnet\sdk\. Cela se produit généralement lorsque le SDK .NET Core a été déployé sur un ordinateur à l’aide de copier/coller au lieu du programme d’installation MSI.Usually this happens when the .NET Core SDK has been deployed on a machine using copy/paste instead of the MSI installer.

Désinstallez tous les 32-bit SDK .NET Core et runtimes pour éviter cet avertissement.Uninstall all 32-bit .NET Core SDKs and runtimes to prevent this warning. Désinstaller à partir de le panneau de configuration > programmes et fonctionnalités > désinstaller ou modifier un programme.Uninstall from Control Panel > Programs and Features > Uninstall or change a program. Si vous comprenez pourquoi l’avertissement se produit et ses implications, vous pouvez ignorer l’avertissement.If you understand why the warning occurs and its implications, you can ignore the warning.

Aucun SDK .NET Core ont été détectées.No .NET Core SDKs were detected

  • Dans Visual Studio nouveau projet boîte de dialogue pour ASP.NET Core, vous pouvez voir l’avertissement suivant :In the Visual Studio New Project dialog for ASP.NET Core, you may see the following warning:

    Aucun SDK .NET Core ont été détectées, assurez-vous qu’ils sont inclus dans la variable d’environnement PATH.No .NET Core SDKs were detected, ensure they are included in the environment variable PATH.

  • Lors de l’exécution un dotnet commande, l’avertissement s’affiche en tant que :When executing a dotnet command, the warning appears as:

    Il n’était pas possible de trouver n’importe quel dotnet installé kits de développement logiciel.It was not possible to find any installed dotnet SDKs.

Ces avertissements apparaissent lorsque la variable d’environnement PATH ne pointe pas vers n’importe quel SDK .NET Core sur l’ordinateur.These warnings appear when the environment variable PATH doesn't point to any .NET Core SDKs on the machine. Pour résoudre ce problème :To resolve this problem:

  • Installez le SDK .NET Core.Install the .NET Core SDK. Obtenir le programme d’installation la plus récente à partir de téléchargements .NET.Obtain the latest installer from .NET Downloads.
  • Vérifiez que le PATH variable d’environnement pointe vers l’emplacement où est installé le Kit de développement logiciel (C:\Program Files\dotnet\ pour 64-bit/x64 ou C:\Program Files (x86)\dotnet\ pour 32 x bit/x86).Verify that the PATH environment variable points to the location where the SDK is installed (C:\Program Files\dotnet\ for 64-bit/x64 or C:\Program Files (x86)\dotnet\ for 32-bit/x86). Le programme d’installation du Kit de développement logiciel définit normalement le PATH.The SDK installer normally sets the PATH. Installez toujours le même nombre de bits SDK et runtimes sur le même ordinateur.Always install the same bitness SDKs and runtimes on the same machine.

Après avoir installé le Bundle d’hébergement .NET Core SDK est absentMissing SDK after installing the .NET Core Hosting Bundle

L’installation de la Bundle d’hébergement .NET Core modifie le PATH quand il installe le runtime .NET Core pour pointer vers la version 32 bits (x 86) de .NET Core (C:\Program Files (x86)\dotnet\).Installing the .NET Core Hosting Bundle modifies the PATH when it installs the .NET Core runtime to point to the 32-bit (x86) version of .NET Core (C:\Program Files (x86)\dotnet\). Cela peut entraîner manquant de kits de développement logiciel lorsque 32 bits (x 86) .NET Core dotnet commande est utilisée (SDK .NET Core ont été détectées).This can result in missing SDKs when the 32-bit (x86) .NET Core dotnet command is used (No .NET Core SDKs were detected). Pour résoudre ce problème, déplacez C:\Program Files\dotnet\ à une position avant C:\Program Files (x86)\dotnet\ sur le PATH.To resolve this problem, move C:\Program Files\dotnet\ to a position before C:\Program Files (x86)\dotnet\ on the PATH.

Obtenir des données à partir d’une applicationObtain data from an app

Si une application est capable de répondre aux demandes, vous pouvez obtenir les données suivantes à partir de l’application à l’aide d’intergiciel (middleware) :If an app is capable of responding to requests, you can obtain the following data from the app using middleware:

  • Demande – (méthode), schéma, hôte, pathbase, le chemin d’accès, chaîne de requête, en-têtesRequest – Method, scheme, host, pathbase, path, query string, headers
  • Connexion – adresse IP distante, port distant, adresse IP locale, port local, certificat clientConnection – Remote IP address, remote port, local IP address, local port, client certificate
  • Identité – nom, nom d’affichageIdentity – Name, display name
  • Paramètres de configurationConfiguration settings
  • Variables d’environnementEnvironment variables

Placez le code suivant intergiciel (middleware) code au début de la Startup.Configure pipeline de traitement de demande de la méthode.Place the following middleware code at the beginning of the Startup.Configure method's request processing pipeline. L’environnement est vérifié avant l’exécution de l’intergiciel (middleware) pour vous assurer que le code est exécuté uniquement dans l’environnement de développement.The environment is checked before the middleware is run to ensure that the code is only executed in the Development environment.

Pour obtenir l’environnement, utilisez une des approches suivantes :To obtain the environment, use either of the following approaches:

  • Injecter le IHostingEnvironment dans le Startup.Configure (méthode) et la vérification de l’environnement avec la variable locale.Inject the IHostingEnvironment into the Startup.Configure method and check the environment with the local variable. L’exemple de code suivant illustre cette approche.The following sample code demonstrates this approach.

  • Affecter l’environnement à une propriété dans la Startup classe.Assign the environment to a property in the Startup class. Vérifier l’environnement à l’aide de la propriété (par exemple, if (Environment.IsDevelopment())).Check the environment using the property (for example, 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());
        });
    }
}