Rozwiązywanie problemów i debugowanie ASP.NET Core projektówTroubleshoot and debug ASP.NET Core projects

Autor: Rick AndersonBy Rick Anderson

Poniższe linki udostępniają wskazówki dotyczące rozwiązywania problemów:The following links provide troubleshooting guidance:

Ostrzeżenia zestaw .NET Core SDK.NET Core SDK warnings

Są zainstalowane zarówno 32-bitowe, jak i 64-bitowe wersje zestaw .NET Core SDK.Both the 32-bit and 64-bit versions of the .NET Core SDK are installed

W oknie dialogowym Nowy projekt dla ASP.NET Core może zostać wyświetlone następujące ostrzeżenie:In the New Project dialog for ASP.NET Core, you may see the following warning:

Zainstalowane są zarówno 32-bitowe, jak i 64-bitowe wersje zestaw .NET Core SDK.Both 32-bit and 64-bit versions of the .NET Core SDK are installed. Wyświetlane są tylko szablony z wersji 64-bitowych zainstalowanych w lokalizacji "C: \ Program Files \ dotnet \ SDK \ ".Only templates from the 64-bit versions installed at 'C:\Program Files\dotnet\sdk\' are displayed.

To ostrzeżenie jest wyświetlane, gdy są zainstalowane zarówno wersje 32-bitowe (x86), jak i 64-bitowe (x64) zestaw .NET Core SDK .This warning appears when both 32-bit (x86) and 64-bit (x64) versions of the .NET Core SDK are installed. Typowe przyczyny instalacji obu wersji obejmują:Common reasons both versions may be installed include:

  • Instalator zestaw .NET Core SDK został pierwotnie pobrany przy użyciu maszyny 32-bitowej, ale następnie został skopiowany na komputer z systemem 64-bitowym.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.
  • 32-bitowy zestaw .NET Core SDK został zainstalowany przez inną aplikację.The 32-bit .NET Core SDK was installed by another application.
  • Pobrano i zainstalowano nieprawidłową wersję.The wrong version was downloaded and installed.

Odinstaluj 32-bitowy zestaw .NET Core SDK, aby uniknąć tego ostrzeżenia.Uninstall the 32-bit .NET Core SDK to prevent this warning. Odinstaluj z Panelu sterowania > programy i funkcje > Odinstaluj lub zmień program .Uninstall from Control Panel > Programs and Features > Uninstall or change a program . Jeśli rozumiesz, dlaczego ostrzeżenie i jego konsekwencje, możesz zignorować to ostrzeżenie.If you understand why the warning occurs and its implications, you can ignore the warning.

Zestaw .NET Core SDK jest zainstalowany w wielu lokalizacjachThe .NET Core SDK is installed in multiple locations

W oknie dialogowym Nowy projekt dla ASP.NET Core może zostać wyświetlone następujące ostrzeżenie:In the New Project dialog for ASP.NET Core, you may see the following warning:

Zestaw .NET Core SDK jest zainstalowany w wielu lokalizacjach.The .NET Core SDK is installed in multiple locations. Wyświetlane są tylko szablony z zestawów SDK zainstalowanych w lokalizacji "C: \ Program Files \ dotnet \ SDK \ ".Only templates from the SDKs installed at 'C:\Program Files\dotnet\sdk\' are displayed.

Ten komunikat jest wyświetlany w przypadku co najmniej jednej instalacji zestaw .NET Core SDK w katalogu poza językiem C: \ Program Files \ \ zestawu 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\ . Zwykle zdarza się to, gdy zestaw .NET Core SDK został wdrożony na komputerze przy użyciu funkcji kopiowania/wklejania zamiast Instalatora MSI.Usually this happens when the .NET Core SDK has been deployed on a machine using copy/paste instead of the MSI installer.

Odinstaluj wszystkie 32-bitowe zestawy SDK platformy .NET Core i środowiska uruchomieniowe, aby uniknąć tego ostrzeżenia.Uninstall all 32-bit .NET Core SDKs and runtimes to prevent this warning. Odinstaluj z Panelu sterowania > programy i funkcje > Odinstaluj lub zmień program .Uninstall from Control Panel > Programs and Features > Uninstall or change a program . Jeśli rozumiesz, dlaczego ostrzeżenie i jego konsekwencje, możesz zignorować to ostrzeżenie.If you understand why the warning occurs and its implications, you can ignore the warning.

Nie wykryto żadnych zestawów .NET Core SDKNo .NET Core SDKs were detected

  • W oknie dialogowym Nowy projekt programu Visual Studio dla ASP.NET Core może zostać wyświetlone następujące ostrzeżenie:In the Visual Studio New Project dialog for ASP.NET Core, you may see the following warning:

    Nie wykryto żadnych zestawów .NET Core SDK, upewnij się, że są one uwzględnione w zmiennej środowiskowej PATH .No .NET Core SDKs were detected, ensure they are included in the environment variable PATH.

  • Gdy wykonujesz dotnet polecenie, ostrzeżenie jest wyświetlane jako:When executing a dotnet command, the warning appears as:

    Nie można znaleźć żadnych zainstalowanych zestawów SDK dotnet.It was not possible to find any installed dotnet SDKs.

Te ostrzeżenia są wyświetlane, gdy zmienna środowiskowa PATH nie wskazuje żadnych zestawów SDK platformy .NET Core na komputerze.These warnings appear when the environment variable PATH doesn't point to any .NET Core SDKs on the machine. Aby rozwiązać ten problem:To resolve this problem:

  • Zainstaluj zestaw .NET Core SDK.Install the .NET Core SDK. Uzyskaj najnowszy Instalator z programu .NET downloads.Obtain the latest installer from .NET Downloads.
  • Sprawdź, czy PATH zmienna środowiskowa wskazuje lokalizację, w której zainstalowano zestaw SDK ( C:\Program Files\dotnet\ 64-bitowy/x64 lub C:\Program Files (x86)\dotnet\ 32-bitowy/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). Instalator zestawu SDK zazwyczaj ustawia PATH .The SDK installer normally sets the PATH. Zawsze Instaluj te same zestawy SDK i środowiska uruchomieniowe na tym samym komputerze.Always install the same bitness SDKs and runtimes on the same machine.

Brak zestawu SDK po zainstalowaniu pakietu hostingu platformy .NET CoreMissing SDK after installing the .NET Core Hosting Bundle

Zainstalowanie pakietu hostingu platformy .NET Core modyfikuje, PATH kiedy instaluje środowisko uruchomieniowe programu .NET Core w celu wskazywania wersji 32-bitowej (x86) platformy .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\). Może to spowodować brak zestawów SDK, gdy zostanie użyte polecenie programu .NET Core 32-bitowe (x86) dotnet (nie wykryto żadnych zestawów SDK dla platformy .NET Core).This can result in missing SDKs when the 32-bit (x86) .NET Core dotnet command is used (No .NET Core SDKs were detected). Aby rozwiązać ten problem, przejdź C:\Program Files\dotnet\ do pozycji przed C:\Program Files (x86)\dotnet\ PATH .To resolve this problem, move C:\Program Files\dotnet\ to a position before C:\Program Files (x86)\dotnet\ on the PATH.

Uzyskiwanie danych z aplikacjiObtain data from an app

Jeśli aplikacja może odpowiadać na żądania, można uzyskać następujące dane z aplikacji za pomocą oprogramowania pośredniczącego:If an app is capable of responding to requests, you can obtain the following data from the app using middleware:

  • Żądanie: metoda, schemat, host, pathbase, ścieżka, ciąg zapytania, nagłówkiRequest: Method, scheme, host, pathbase, path, query string, headers
  • Połączenie: zdalny adres IP, Port zdalny, lokalny adres IP, port lokalny, certyfikat klientaConnection: Remote IP address, remote port, local IP address, local port, client certificate
  • Identity: Nazwa, nazwa wyświetlanaIdentity: Name, display name
  • Ustawienia konfiguracjiConfiguration settings
  • Zmienne środowiskoweEnvironment variables

Umieść poniższy kod oprogramowania pośredniczącego na początku Startup.Configure potoku przetwarzania żądania metody.Place the following middleware code at the beginning of the Startup.Configure method's request processing pipeline. Środowisko jest sprawdzane przed uruchomieniem oprogramowania pośredniczącego, aby upewnić się, że kod jest wykonywany tylko w środowisku deweloperskim.The environment is checked before the middleware is run to ensure that the code is only executed in the Development environment.

Aby uzyskać środowisko, użyj jednej z następujących metod:To obtain the environment, use either of the following approaches:

  • Wstrzyknąć IHostingEnvironment do Startup.Configure metody i Sprawdź środowisko przy użyciu zmiennej lokalnej.Inject the IHostingEnvironment into the Startup.Configure method and check the environment with the local variable. Poniższy przykładowy kod demonstruje takie podejście.The following sample code demonstrates this approach.

  • Przypisz środowisko do właściwości w Startup klasie.Assign the environment to a property in the Startup class. Sprawdź środowisko przy użyciu właściwości (na przykład 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());
        });
    }
}

Debuguj ASP.NET Core aplikacjeDebug ASP.NET Core apps

Poniższe linki zawierają informacje dotyczące debugowania ASP.NET Core aplikacji.The following links provide information on debugging ASP.NET Core apps.