Risolvere i problemi ed eseguire il debug di progetti ASP.NET Core
I collegamenti seguenti forniscono indicazioni per la risoluzione dei problemi:
- Risolvere i problemi di ASP.NET Core in Servizio app di Azure e IIS
- Risoluzione di errori comuni di Servizio app di Azure e IIS con ASP.NET Core
- Conferenza NDC (Londra, 2018): Diagnosi dei problemi nelle applicazioni principali di ASP.NET
- blog di ASP.NET: Risoluzione dei problemi di prestazioni principali di ASP.NET
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
PATH
di 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 oC:\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 PATH
su .
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 esempioif (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.
- Debug di ASP Core in Linux
- Debug di .NET Core in Unix su SSH
- Guida introduttiva: Eseguire il debug di ASP.NET con il debugger di Visual Studio
- Per altre informazioni sul debug, vedere questo problema di GitHub.