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 wersje zestaw .NET Core SDK programu

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

Instalowane są zarówno 32-bitowe, jak i 64-bitowe zestaw .NET Core SDK wersji. Wyświetlane są tylko szablony z wersji 64-bitowych zainstalowanych w folderze "C:\Program Files\dotnet\sdk\".

To ostrzeżenie jest wyświetlane, gdy są zainstalowane 32-bitowe (x86) i 64-bitowe (x64) zestaw .NET Core SDK wersji. Typowe przyczyny instaluj obie wersje:

  • Pierwotnie pobrano instalatora zestaw .NET Core SDK przy użyciu komputera 32-bitowego, a następnie skopiowano go i zainstalowano na maszynie 64-bitowej.
  • 32-bitowa zestaw .NET Core SDK została zainstalowana przez inną aplikację.
  • Pobrano i zainstalowano niewłaściwą wersję.

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

Lokacja zestaw .NET Core SDK zainstalowana w wielu lokalizacjach

W oknie dialogowym Project nowej 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 folderze "C:\Program Files\dotnet\sdk\".

Ten komunikat jest wyświetlany, gdy masz co najmniej jedną instalację zestaw .NET Core SDK w katalogu poza katalogiem 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 .NET Core SDK i środowiska uruchomieniowe, aby zapobiec temu ostrzeganiu. Odinstaluj Panel sterowania>Programy ifunkcjeUninstaluj> lub zmień program. Jeśli rozumiesz, dlaczego występuje ostrzeżenie i jakie ma to konsekwencje, możesz je zignorować.

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 polecenia dotnet ostrzeżenie jest wyświetlane jako:

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

Te ostrzeżenia są wyświetlane, gdy zmienna środowiskowa PATH 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 programu .NET Downloads (Pliki do pobrania dla programu .NET).
  • Sprawdź, czy PATH zmienna środowiskowa wskazuje lokalizację, w której zainstalowano zestaw SDK (C:\Program Files\dotnet\ dla wersji 64-bitowej/x64 C:\Program Files (x86)\dotnet\ lub dla wersji 32-bitowej/x86). Instalator zestawu SDK zwykle ustawia plik PATH. Zawsze instaluj te same zestawy SDK bitness i środowiska uruchomieniowe na tym samym komputerze.

Brak zestawu SDK po zainstalowaniu pakietu hostingu platformy .NET Core

Zainstalowanie pakietu hostingowego .NET CorePATH modyfikuje element podczas instalowania środowiska uruchomieniowego .NET Core, aby wskazać 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 dotnet (nie wykryto zestawów SDK .NET Core). Aby rozwiązać ten problem, przejdź C:\Program Files\dotnet\ 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, ścieżka, ś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:

  • Wstrzyknąć IHostingEnvironment 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.