Risolvere i problemi ed eseguire il debug di progetti ASP.NET Core

Di Rick Anderson

I collegamenti seguenti forniscono indicazioni per la risoluzione dei problemi:

Avvisi di .NET Core SDK

Vengono installate sia le versioni a 32 bit che a 64 bit di .NET Core SDK

Nella finestra di dialogo Nuovo progetto per ASP.NET Core è possibile che venga visualizzato l'avviso seguente:

Sono installate sia versioni a 32 bit che a 64 bit di .NET Core SDK. Vengono visualizzati solo i modelli delle versioni a 64 bit installate in 'C:\Programmi\dotnet\sdk\'.

Questo avviso viene visualizzato quando vengono installate sia versioni a 32 bit (x86) che a 64 bit (x64) di .NET Core SDK . I motivi comuni per cui è possibile installare entrambe le versioni includono:

  • In origine è stato scaricato il programma di installazione di .NET Core SDK usando un computer a 32 bit, ma copiato e installato in un computer a 64 bit.
  • .NET Core SDK a 32 bit è stato installato da un'altra applicazione.
  • La versione errata è stata scaricata e installata.

Disinstallare .NET Core SDK a 32 bit per evitare questo avviso. Disinstallare da Pannello di controllo> Programmi e funzionalità>Disinstallare o modificare un programma. Se si comprende il motivo per cui si verifica l'avviso e le relative implicazioni, è possibile ignorare l'avviso.

.NET Core SDK viene installato in più posizioni

Nella finestra di dialogo Nuovo progetto per ASP.NET Core è possibile che venga visualizzato l'avviso seguente:

.NET Core SDK viene installato in più posizioni. Vengono visualizzati solo i modelli degli SDK installati in 'C:\Programmi\dotnet\sdk\'.

Questo messaggio viene visualizzato quando si dispone di almeno un'installazione di .NET Core SDK in una directory esterna a C:\Programmi\dotnet\sdk\. In genere ciò si verifica quando .NET Core SDK è stato distribuito in un computer usando copia/incolla anziché il programma di installazione MSI.

Disinstallare tutti gli SDK e i runtime di .NET Core a 32 bit per evitare questo avviso. Disinstallare da Pannello di controllo> Programmi e funzionalità>Disinstallare o modificare un programma. Se si comprende il motivo per cui si verifica l'avviso e le relative implicazioni, è possibile ignorare l'avviso.

Non sono stati rilevati SDK .NET Core

  • Nella finestra di dialogo Nuovo progetto di Visual Studio per ASP.NET Core è possibile che venga visualizzato l'avviso seguente:

    Non sono stati rilevati SDK .NET Core, assicurarsi che siano inclusi nella variabile PATHdi ambiente .

  • Quando si esegue un dotnet comando, l'avviso viene visualizzato come:

    Non è stato possibile trovare gli SDK dotnet installati.

Questi avvisi vengono visualizzati quando la variabile PATH di ambiente non punta ad alcun SDK .NET Core nel computer. Per risolvere questo problema:

  • Installare .NET Core SDK. Ottenere il programma di installazione più recente dai download .NET.
  • Verificare che la PATH variabile di ambiente punti al percorso in cui è installato l'SDK (C:\Program Files\dotnet\ per 64 bit/x64 o C:\Program Files (x86)\dotnet\ per 32 bit/x86). Il programma di installazione dell'SDK imposta normalmente .PATH Installare sempre gli SDK e i runtime di bit nello stesso computer.

SDK mancante dopo l'installazione del bundle di hosting di .NET Core

L'installazione del bundle di hosting .NET Core modifica PATH quando installa il runtime di .NET Core in modo che punti alla versione a 32 bit (x86) di .NET Core (C:\Program Files (x86)\dotnet\). Questo può comportare l'assenza di SDK quando viene usato il comando .NET Core dotnet a 32 bit (x86) (non sono stati rilevati SDK .NET Core). Per risolvere questo problema, passare C:\Program Files\dotnet\ a una posizione prima C:\Program Files (x86)\dotnet\ di PATHsu .

Ottenere dati da un'app

Se un'app è in grado di rispondere alle richieste, è possibile ottenere i dati seguenti dall'app usando il middleware:

  • Richiesta: metodo, schema, host, pathbase, percorso, stringa di query, intestazioni
  • Connessione: indirizzo IP remoto, porta remota, indirizzo IP locale, porta locale, certificato client
  • Identity: Nome, nome visualizzato
  • Impostazioni di configurazione
  • Variabili di ambiente

Inserire il codice middleware seguente all'inizio della Startup.Configure pipeline di elaborazione delle richieste del metodo. L'ambiente viene controllato prima dell'esecuzione del middleware per assicurarsi che il codice venga eseguito solo nell'ambiente di sviluppo.

Per ottenere l'ambiente, usare uno degli approcci seguenti:

  • Inserire nel IHostingEnvironment Startup.Configure metodo e controllare l'ambiente con la variabile locale. Il codice di esempio seguente illustra questo approccio.

  • Assegnare l'ambiente a una proprietà nella Startup classe . Controllare l'ambiente usando la proprietà , ad esempio 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());
        });
    }
}

Eseguire il debug di app ASP.NET Core

I collegamenti seguenti forniscono informazioni sul debug ASP.NET app Core.