Problembehandlung und Debuggen von ASP.NET Core-ProjektenTroubleshoot and debug ASP.NET Core projects

Von Rick AndersonBy Rick Anderson

Die folgenden Links bieten Hinweise zur Problembehandlung:The following links provide troubleshooting guidance:

.NET Core SDK-Warnungen.NET Core SDK warnings

Sowohl die 32-Bit- als auch die 64-Bit-Version des .NET Core SDKs sind installiert.Both the 32-bit and 64-bit versions of the .NET Core SDK are installed

Im Dialogfeld Neues Projekt für ASP.NET Core wird möglicherweise die folgende Warnung angezeigt:In the New Project dialog for ASP.NET Core, you may see the following warning:

Sowohl 32-Bit- als auch 64-Bit-Versionen des .NET Core SDKs sind installiert.Both 32-bit and 64-bit versions of the .NET Core SDK are installed. Es werden nur Vorlagen der 64-Bit-Versionen angezeigt, die unter „C:\Programme\dotnet\sdk\“ installiert sind.Only templates from the 64-bit versions installed at 'C:\Program Files\dotnet\sdk\' are displayed.

Diese Warnung wird angezeigt, wenn sowohl 32-Bit- (x86) als auch 64-Bit-Versionen (x64) des .NET Core SDKs installiert sind.This warning appears when both 32-bit (x86) and 64-bit (x64) versions of the .NET Core SDK are installed. Häufige Gründe für die Installation beider Versionen sind unter anderem:Common reasons both versions may be installed include:

  • Sie haben das .NET Core SDK-Installationsprogramm ursprünglich mit einem 32-Bit-Computer heruntergeladen, es dann aber auf einen 64-Bit-Computer kopiert und installiert.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.
  • Die 32-Bit-Version des .NET Core SDKs wurde von einer anderen Anwendung installiert.The 32-bit .NET Core SDK was installed by another application.
  • Die falsche Version wurde heruntergeladen und installiert.The wrong version was downloaded and installed.

Deinstallieren Sie die 32-Bit-Version des .NET Core SDKs, um diese Warnung zu verhindern.Uninstall the 32-bit .NET Core SDK to prevent this warning. Deinstallieren Sie über Systemsteuerung > Programme und Features > Programm deinstallieren oder ändern.Uninstall from Control Panel > Programs and Features > Uninstall or change a program. Wenn Sie verstehen, warum die Warnung und ihre Auswirkungen auftreten, können Sie die Warnung ignorieren.If you understand why the warning occurs and its implications, you can ignore the warning.

Das .NET Core SDK ist an mehreren Speicherorten installiert.The .NET Core SDK is installed in multiple locations

Im Dialogfeld Neues Projekt für ASP.NET Core wird möglicherweise die folgende Warnung angezeigt:In the New Project dialog for ASP.NET Core, you may see the following warning:

Das .NET Core SDK ist an mehreren Speicherorten installiert.The .NET Core SDK is installed in multiple locations. Es werden nur Vorlagen des SDKs angezeigt, die unter „C:\Programme\dotnet\sdk\“ installiert sind.Only templates from the SDKs installed at 'C:\Program Files\dotnet\sdk\' are displayed.

Diese Meldung wird angezeigt, wenn Sie über mindestens eine Installation des .NET Core SDK in einem Verzeichnis außerhalb von C:\Programme\dotnet\sdk\ verfügen.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\. Normalerweise geschieht dies, wenn das .NET Core SDKs auf einem Computer über Kopieren/Einfügen anstatt mit dem MSI-Installationsprogramm bereitgestellt wurde.Usually this happens when the .NET Core SDK has been deployed on a machine using copy/paste instead of the MSI installer.

Deinstallieren Sie alle 32-Bit-Versionen des .NET Core SDKs und der Laufzeiten, um diese Warnung zu verhindern.Uninstall all 32-bit .NET Core SDKs and runtimes to prevent this warning. Deinstallieren Sie über Systemsteuerung > Programme und Features > Programm deinstallieren oder ändern.Uninstall from Control Panel > Programs and Features > Uninstall or change a program. Wenn Sie verstehen, warum die Warnung und ihre Auswirkungen auftreten, können Sie die Warnung ignorieren.If you understand why the warning occurs and its implications, you can ignore the warning.

Es wurden keine .NET Core SDKs erkannt.No .NET Core SDKs were detected

  • Im Dialogfeld Neues Projekt in Visual Studio für ASP.NET Core wird möglicherweise die folgende Warnung angezeigt:In the Visual Studio New Project dialog for ASP.NET Core, you may see the following warning:

    Es wurden keine .NET Core SDKs erkannt. Stellen Sie sicher, dass sie in der Umgebungsvariablen PATH enthalten sind.No .NET Core SDKs were detected, ensure they are included in the environment variable PATH.

  • Wenn Sie einen dotnet-Befehl ausführen, wird die Meldung wie folgt angezeigt:When executing a dotnet command, the warning appears as:

    Es konnten keine installierten Dotnet-SDKs gefunden werden.It was not possible to find any installed dotnet SDKs.

Diese Warnungen werden angezeigt, wenn die Umgebungsvariable PATH nicht auf . NET Core SDKs auf dem Computer verweist.These warnings appear when the environment variable PATH doesn't point to any .NET Core SDKs on the machine. Dieses Problem lässt sich wie folgt beheben:To resolve this problem:

  • Installieren Sie das .NET Core-SDK.Install the .NET Core SDK. Das aktuellste Installationsprogramm erhalten Sie unter .NET-Downloads.Obtain the latest installer from .NET Downloads.
  • Stellen Sie sicher, dass die Umgebungsvariable PATH auf den Speicherort verweist, an dem das SDK installiert ist (C:\Program Files\dotnet\ für 64-Bit/x64 oder C:\Program Files (x86)\dotnet\ für 32-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). Das SDK-Installationsprogramm legt normalerweise den PATH fest.The SDK installer normally sets the PATH. Installieren Sie immer SDKs und Laufzeiten mit derselben Bitanzahl auf demselben Computer.Always install the same bitness SDKs and runtimes on the same machine.

Fehlendes SDK nach der Installation des .NET Core-HostingpaketsMissing SDK after installing the .NET Core Hosting Bundle

Durch die Installation des .NET Core-Hostingpakets wird der PATH bei der Installation der .NET Core-Laufzeit so geändert, dass er auf die 32-Bit-Version (x86) von .NET Core (C:\Program Files (x86)\dotnet\) verweist.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\). Dies kann zu fehlenden SDKs führen, wenn der 32-Bit (x86) .NET Core-Befehl dotnet verwendet wird (Es wurden keine .NET Core SDKs erkannt).This can result in missing SDKs when the 32-bit (x86) .NET Core dotnet command is used (No .NET Core SDKs were detected). Um dieses Problem zu beheben, verschieben Sie C:\Program Files\dotnet\ an einen Speicherort vor C:\Program Files (x86)\dotnet\ in dem PATH.To resolve this problem, move C:\Program Files\dotnet\ to a position before C:\Program Files (x86)\dotnet\ on the PATH.

Abrufen von Daten aus einer AppObtain data from an app

Wenn eine App in der Lage ist, auf Anforderungen zu antworten, können Sie die folgenden Daten über eine Middleware aus der App erhalten:If an app is capable of responding to requests, you can obtain the following data from the app using middleware:

  • Anforderung: Methode, Schema, Host, Pfadbasis, Pfad, Abfragezeichenfolge, HeaderRequest: Method, scheme, host, pathbase, path, query string, headers
  • Verbindung: Remote-IP-Adresse, Remoteport, lokale IP-Adresse, lokaler Port, ClientzertifikatConnection: Remote IP address, remote port, local IP address, local port, client certificate
  • Identity: Name, AnzeigenameIdentity: Name, display name
  • KonfigurationseinstellungenConfiguration settings
  • UmgebungsvariablenEnvironment variables

Platzieren Sie den folgenden Middleware-Code an den Anfang der Anforderungsverarbeitungspipeline der Startup.Configure-Methode.Place the following middleware code at the beginning of the Startup.Configure method's request processing pipeline. Die Umgebung wird vor der Ausführung der Middleware überprüft, um sicherzustellen, dass der Code nur in der Entwicklungsumgebung ausgeführt wird.The environment is checked before the middleware is run to ensure that the code is only executed in the Development environment.

Um die Umgebung zu erhalten, verwenden Sie einen der folgenden Ansätze:To obtain the environment, use either of the following approaches:

  • Fügen Sie die IHostingEnvironment in die Startup.Configure-Methode ein, und prüfen Sie die Umgebung mit der lokalen Variablen.Inject the IHostingEnvironment into the Startup.Configure method and check the environment with the local variable. Dieser Ansatz wird im folgenden Beispielcode veranschaulicht.The following sample code demonstrates this approach.

  • Weisen Sie die Umgebung einer Eigenschaft der Klasse Startup zu.Assign the environment to a property in the Startup class. Überprüfen Sie die Umgebung mithilfe der Eigenschaft (z. B. 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());
        });
    }
}

Debuggen von ASP.NET Core-AppsDebug ASP.NET Core apps

Die folgenden Links bieten Informationen zum Debuggen von ASP.NET Core-Apps.The following links provide information on debugging ASP.NET Core apps.