Rozwiązywanie problemów z projektami ASP.NET Core debugowania

Autor: Rick Anderson

Poniższe linki zawierają wskazówki dotyczące rozwiązywania problemów:

zestaw .NET Core SDK ostrzeżeń

Instalowane są zarówno 32-bitowe, jak i 64-bitowe zestaw .NET Core SDK programu

W oknie dialogowym Project dla ASP.NET Core może zostać wyświetlone następujące ostrzeżenie:

Instalowane są 32-bitowe i 64-bitowe wersje zestaw .NET Core SDK. Wyświetlane są tylko szablony z wersji 64-bitowych zainstalowanych w przewodniku "C: \ Program Files \ dotnet \ \ sdk".

To ostrzeżenie jest wyświetlane, gdy są zainstalowane 32-bitowe (x86) i 64-bitowe (x64) wersje zestaw .NET Core SDK. Typowe przyczyny, dla których obie wersje mogą być instalowane, to:

  • Pierwotnie pobrano instalatora zestaw .NET Core SDK przy użyciu maszyny 32-bitowej, a następnie skopiowano go i zainstalowano na maszynie 64-bitowej.
  • 32-bitowy zestaw .NET Core SDK został zainstalowany przez inną aplikację.
  • Nieprawidłowa wersja została pobrana i zainstalowana.

Odinstaluj 32-bitowe zestaw .NET Core SDK, aby zapobiec temu ostrzeganiu. Odinstaluj Panel sterowania > programy i funkcje > Odinstaluj lub zmień program. Jeśli rozumiesz, dlaczego ostrzeżenie występuje i jakie ma to konsekwencje, możesz zignorować to ostrzeżenie.

Ten zestaw .NET Core SDK jest zainstalowany w wielu lokalizacjach

W oknie dialogowym Project dla ASP.NET Core może zostać wyświetlone następujące ostrzeżenie:

Ten zestaw .NET Core SDK jest instalowany w wielu lokalizacjach. Wyświetlane są tylko szablony z zestawów SDK zainstalowanych w przewodniku "C: \ Program Files \ dotnet \ \ sdk".

Ten komunikat jest wyświetlany, gdy masz co najmniej jedną instalację narzędzia zestaw .NET Core SDK w katalogu poza C: \ Program Files \ dotnet \ sdk \. Zwykle dzieje się tak, zestaw .NET Core SDK została wdrożona na maszynie przy użyciu funkcji kopiowania/wklejania zamiast instalatora MSI.

Odinstaluj wszystkie 32-bitowe zestawy SDK i środowiska uruchomieniowe .NET Core, aby zapobiec temu ostrzeganiu. Odinstaluj Panel sterowania > programy i funkcje > Odinstaluj lub zmień program. Jeśli rozumiesz, dlaczego ostrzeżenie występuje i jakie ma to konsekwencje, możesz zignorować to ostrzeżenie.

Nie wykryto zestawów SDK .NET Core

  • W oknie dialogowym Visual Studio new Project dla ASP.NET Core może zostać wyświetlone następujące ostrzeżenie:

    Nie wykryto zestawów SDK .NET Core, upewnij się, że są one uwzględnione w zmiennej środowiskowej PATH .

  • Podczas wykonywania dotnet polecenia ostrzeżenie jest wyświetlane w następujący sposób:

    Nie można było znaleźć zainstalowanych zestawów SDK dotnet.

Te ostrzeżenia są wyświetlane, gdy zmienna PATH środowiskowa nie wskaże żadnych zestawów SDK .NET Core na maszynie. Aby rozwiązać ten problem:

  • Zainstaluj zestaw .NET Core SDK. Uzyskaj najnowszego instalatora z pakietu do pobrania dla programu .NET.
  • Sprawdź, czy zmienna środowiskowa wskazuje lokalizację, w której zainstalowano zestaw SDK ( dla PATH C:\Program Files\dotnet\ wersji 64-bitowej/x64 lub C:\Program Files (x86)\dotnet\ 32-bitowej/x86). Instalator zestawu SDK zwykle ustawia plik PATH . Zawsze instaluj te same zestawy SDK bitness i środowiska uruchomieniowe na tej samej maszynie.

Brak zestawu SDK po zainstalowaniu pakietu hostingu platformy .NET Core

Zainstalowanie pakietu hostingowego .NET Core modyfikuje środowisko uruchomieniowe .NET Core tak, aby wskazać PATH 32-bitową (x86) wersję programu .NET Core ( C:\Program Files (x86)\dotnet\ ). Może to spowodować brak zestawów SDK w przypadku korzystania z 32-bitowego (x86) polecenia .NET Core (nie wykryto zestawów dotnet SDK .NET Core). Aby rozwiązać ten problem, C:\Program Files\dotnet\ przejdź do pozycji przed w C:\Program Files (x86)\dotnet\ . PATH

Uzyskiwanie danych z aplikacji

Jeśli aplikacja może odpowiadać na żądania, możesz uzyskać następujące dane z aplikacji przy użyciu oprogramowania pośredniczącego:

  • Żądanie: Metoda, schemat, host, pathbase, ścieżka, ciąg zapytania, nagłówki
  • Połączenie: zdalny adres IP, port zdalny, lokalny adres IP, port lokalny, certyfikat klienta
  • Identity: nazwa, nazwa wyświetlana
  • Ustawienia konfiguracji
  • Zmienne środowiskowe

Umieść następujący kod oprogramowania pośredniczącego na początku Startup.Configure potoku przetwarzania żądań metody. Środowisko jest sprawdzane przed uruchomieniem oprogramowania pośredniczącego, aby upewnić się, że kod jest wykonywany tylko w środowisku dewelopera.

Aby uzyskać środowisko, użyj jednej z następujących metod:

  • IHostingEnvironmentWstrzyknąć do Startup.Configure metody i sprawdzić środowisko za pomocą zmiennej lokalnej. W poniższym przykładowym kodzie przedstawiono to podejście.

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

Debugowanie ASP.NET Core aplikacji

Poniższe linki zawierają informacje na temat debugowania ASP.NET Core aplikacji.