Sdílet prostřednictvím


Řešení potíží s projekty ASP.NET Core a jejich ladění

Autor: Rick Anderson

Následující odkazy obsahují pokyny pro řešení potíží:

Upozornění sady .NET Core SDK

Jsou nainstalovány 32bitové i 64bitové verze sady .NET Core SDK.

V dialogovém okně Nový projekt pro ASP.NET Core se může zobrazit následující upozornění:

Jsou nainstalovány 32bitové i 64bitové verze sady .NET Core SDK. Zobrazí se pouze šablony z 64bitových verzí nainstalovaných v C:\Program Files\dotnet\sdk\.

Toto upozornění se zobrazí, když jsou nainstalované 32bitové (x86) i 64bitové (x64) verze sady .NET Core SDK . Mezi běžné důvody instalace obou verzí patří:

  • Instalační program sady .NET Core SDK jste původně stáhli pomocí 32bitového počítače, ale pak jste ho zkopírovali a nainstalovali na 64bitový počítač.
  • 32bitová sada .NET Core SDK byla nainstalována jinou aplikací.
  • Byla stažena a nainstalována nesprávná verze.

Odinstalujte 32bitovou sadu .NET Core SDK, abyste zabránili tomuto upozornění. Odinstalujte program z >Uninstall nebo změňte program. Pokud pochopíte, proč k upozornění dojde a jaké to má důsledky, můžete upozornění ignorovat.

Sada .NET Core SDK je nainstalovaná v několika umístěních.

V dialogovém okně Nový projekt pro ASP.NET Core se může zobrazit následující upozornění:

Sada .NET Core SDK je nainstalovaná ve více umístěních. Zobrazí se pouze šablony ze sad SDK nainstalovaných ve složce C:\Program Files\dotnet\sdk\.

Tato zpráva se zobrazí, pokud máte alespoň jednu instalaci sady .NET Core SDK v adresáři mimo C:\Program Files\dotnet\sdk\. K tomu obvykle dochází v případě, že se sada .NET Core SDK nasadí na počítač pomocí kopírování a vložení místo instalačního programu MSI.

Odinstalujte všechny 32bitové sady SDK a moduly runtime .NET Core, abyste zabránili tomuto upozornění. Odinstalujte program z >Uninstall nebo změňte program. Pokud pochopíte, proč k upozornění dojde a jaké to má důsledky, můžete upozornění ignorovat.

Nebyly zjištěny žádné sady .NET Core SDK.

  • V dialogovém okně Nový projekt sady Visual Studio pro ASP.NET Core se může zobrazit následující upozornění:

    Nebyly zjištěny žádné sady .NET Core SDK, ujistěte se, že jsou zahrnuty do proměnné PATHprostředí .

  • Při spuštění dotnet příkazu se upozornění zobrazí takto:

    Nebylo možné najít žádné nainstalované sady DOtnet SDK.

Tato upozornění se zobrazí, když proměnná PATH prostředí neodkazuje na žádné sady .NET Core SDK na počítači. Tento problém vyřešíte takto:

  • Nainstalujte sadu .NET Core SDK. Získejte nejnovější instalační program ze souborů ke stažení .NET.
  • Ověřte, že PATH proměnná prostředí odkazuje na umístění, kde je sada SDK nainstalovaná (C:\Program Files\dotnet\ pro 64bitovou verzi nebo x64 nebo C:\Program Files (x86)\dotnet\ 32bitovou/x86). Instalační program sady SDK obvykle nastaví PATH. Vždy nainstalujte stejné sady SDK bitness a moduly runtime na stejný počítač.

Chybějící sada SDK po instalaci sady .NET Core Hosting Bundle

Instalace sady hostování .NET Core upraví PATH , když nainstaluje modul runtime .NET Core tak, aby odkazovat na 32bitovou (x86) verzi .NET Core (C:\Program Files (x86)\dotnet\). To může vést k chybějícím sadám SDK při použití 32bitového příkazu .NET Core dotnet (x86) (nebyly zjištěny žádné sady SDK .NET Core). Chcete-li tento problém vyřešit, přejděte C:\Program Files\dotnet\ na pozici před C:\Program Files (x86)\dotnet\ .PATH

Získání dat z aplikace

Pokud aplikace dokáže reagovat na požadavky, můžete z aplikace získat následující data pomocí middlewaru:

  • Žádost: Metoda, schéma, hostitel, základ cesty, cesta, řetězec dotazu, záhlaví
  • Připojení: Vzdálená IP adresa, vzdálený port, místní IP adresa, místní port, klientský certifikát
  • Identity: Název, zobrazovaný název
  • Nastavení konfigurace
  • Proměnné prostředí

Na začátek kanálu zpracování požadavků metody umístěte následující kód middlewaruStartup.Configure. Prostředí se kontroluje před spuštěním middlewaru, aby se zajistilo, že se kód spustí jenom ve vývojovém prostředí.

Získejte nastavení prostředí z vlastnosti Environment a WebApplication. Například if (app.Environment.IsDevelopment()) jako v následujícím ukázkovém kódu.

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Server.IISIntegration;
using System.Text;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication();

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

if (app.Environment.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.Services.
                       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}");
        var config = builder.Configuration;

         foreach (var pair in config.AsEnumerable())
        {
            sb.Append($"{pair.Key}: {pair.Value}{nl}"); 
        }
        sb.Append(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());
    });
}

app.Run();

Ladění aplikací ASP.NET Core

Následující odkazy obsahují informace o ladění aplikací ASP.NET Core.

Autor: Rick Anderson

Následující odkazy obsahují pokyny pro řešení potíží:

Upozornění sady .NET Core SDK

Jsou nainstalovány 32bitové i 64bitové verze sady .NET Core SDK.

V dialogovém okně Nový projekt pro ASP.NET Core se může zobrazit následující upozornění:

Jsou nainstalovány 32bitové i 64bitové verze sady .NET Core SDK. Zobrazí se pouze šablony z 64bitových verzí nainstalovaných v C:\Program Files\dotnet\sdk\.

Toto upozornění se zobrazí, když jsou nainstalované 32bitové (x86) i 64bitové (x64) verze sady .NET Core SDK . Mezi běžné důvody instalace obou verzí patří:

  • Instalační program sady .NET Core SDK jste původně stáhli pomocí 32bitového počítače, ale pak jste ho zkopírovali a nainstalovali na 64bitový počítač.
  • 32bitová sada .NET Core SDK byla nainstalována jinou aplikací.
  • Byla stažena a nainstalována nesprávná verze.

Odinstalujte 32bitovou sadu .NET Core SDK, abyste zabránili tomuto upozornění. Odinstalujte program z >Uninstall nebo změňte program. Pokud pochopíte, proč k upozornění dojde a jaké to má důsledky, můžete upozornění ignorovat.

Sada .NET Core SDK je nainstalovaná v několika umístěních.

V dialogovém okně Nový projekt pro ASP.NET Core se může zobrazit následující upozornění:

Sada .NET Core SDK je nainstalovaná ve více umístěních. Zobrazí se pouze šablony ze sad SDK nainstalovaných ve složce C:\Program Files\dotnet\sdk\.

Tato zpráva se zobrazí, pokud máte alespoň jednu instalaci sady .NET Core SDK v adresáři mimo C:\Program Files\dotnet\sdk\. K tomu obvykle dochází v případě, že se sada .NET Core SDK nasadí na počítač pomocí kopírování a vložení místo instalačního programu MSI.

Odinstalujte všechny 32bitové sady SDK a moduly runtime .NET Core, abyste zabránili tomuto upozornění. Odinstalujte program z >Uninstall nebo změňte program. Pokud pochopíte, proč k upozornění dojde a jaké to má důsledky, můžete upozornění ignorovat.

Nebyly zjištěny žádné sady .NET Core SDK.

  • V dialogovém okně Nový projekt sady Visual Studio pro ASP.NET Core se může zobrazit následující upozornění:

    Nebyly zjištěny žádné sady .NET Core SDK, ujistěte se, že jsou zahrnuty do proměnné PATHprostředí .

  • Při spuštění dotnet příkazu se upozornění zobrazí takto:

    Nebylo možné najít žádné nainstalované sady DOtnet SDK.

Tato upozornění se zobrazí, když proměnná PATH prostředí neodkazuje na žádné sady .NET Core SDK na počítači. Tento problém vyřešíte takto:

  • Nainstalujte sadu .NET Core SDK. Získejte nejnovější instalační program ze souborů ke stažení .NET.
  • Ověřte, že PATH proměnná prostředí odkazuje na umístění, kde je sada SDK nainstalovaná (C:\Program Files\dotnet\ pro 64bitovou verzi nebo x64 nebo C:\Program Files (x86)\dotnet\ 32bitovou/x86). Instalační program sady SDK obvykle nastaví PATH. Vždy nainstalujte stejné sady SDK bitness a moduly runtime na stejný počítač.

Chybějící sada SDK po instalaci sady .NET Core Hosting Bundle

Instalace sady hostování .NET Core upraví PATH , když nainstaluje modul runtime .NET Core tak, aby odkazovat na 32bitovou (x86) verzi .NET Core (C:\Program Files (x86)\dotnet\). To může vést k chybějícím sadám SDK při použití 32bitového příkazu .NET Core dotnet (x86) (nebyly zjištěny žádné sady SDK .NET Core). Chcete-li tento problém vyřešit, přejděte C:\Program Files\dotnet\ na pozici před C:\Program Files (x86)\dotnet\ .PATH

Získání dat z aplikace

Pokud aplikace dokáže reagovat na požadavky, můžete z aplikace získat následující data pomocí middlewaru:

  • Žádost: Metoda, schéma, hostitel, základ cesty, cesta, řetězec dotazu, záhlaví
  • Připojení: Vzdálená IP adresa, vzdálený port, místní IP adresa, místní port, klientský certifikát
  • Identity: Název, zobrazovaný název
  • Nastavení konfigurace
  • Proměnné prostředí

Na začátek kanálu zpracování požadavků metody umístěte následující kód middlewaruStartup.Configure. Prostředí se kontroluje před spuštěním middlewaru, aby se zajistilo, že se kód spustí jenom ve vývojovém prostředí.

K získání prostředí použijte některý z následujících přístupů:

  • Vložte do IHostingEnvironmentStartup.Configure metody a zkontrolujte prostředí s místní proměnnou. Tento přístup ukazuje následující ukázkový kód.

  • Přiřaďte prostředí k vlastnosti ve Startup třídě. Zkontrolujte prostředí pomocí vlastnosti (například 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());
        });
    }
}

Ladění aplikací ASP.NET Core

Následující odkazy obsahují informace o ladění aplikací ASP.NET Core.