Solucionar problemas e depurar projetos do ASP.NET Core
Os links a seguir fornecem diretrizes de solução de problemas:
- Solucionar problemas do ASP.NET Core no Serviço de Aplicativo do Azure e no IIS
- Solucionar problemas com erros comuns no Serviço de Aplicativo do Azure e no IIS com o ASP.NET Core
- Conferência NDC (Londres, 2018): Diagnóstico de problemas em aplicativos ASP.NET Core
- Blog do ASP.NET: solução de problemas de desempenho do ASP.NET Core
Avisos do SDK do .NET Core
As versões de 32 e 64 bits do SDK do .NET Core são instaladas
Na caixa de diálogo Novo Projeto para o ASP.NET Core, você poderá ver o seguinte aviso:
As versões de 32 e 64 bits do SDK do .NET Core são instaladas. Somente os modelos das versões de 64 bits instaladas em 'C:\Program Files\dotnet\sdk\' são exibidos.
Esse aviso aparece quando as versões de 32 bits (x86) e de 64 bits (x64) do SDK do .NET Core são instaladas. Os motivos comuns pelos quais ambas as versões podem ser instaladas são:
- Originalmente, você baixou o instalador do SDK do .NET Core usando um computador de 32 bits, mas depois o copiou e instalou em um computador de 64 bits.
- O SDK do .NET Core de 32 bits foi instalado por outro aplicativo.
- A versão errada foi baixada e instalada.
Desinstale o SDK do .NET Core de 32 bits para evitar esse aviso. Para desinstalar, acesse Painel de Controle>Programas e Recursos>Desinstalar ou alterar um programa. Se você entende por que o aviso ocorre e quais são as implicações, pode ignorar o aviso.
O SDK do .NET Core é instalado em vários locais
Na caixa de diálogo Novo Projeto para o ASP.NET Core, você poderá ver o seguinte aviso:
O SDK do .NET Core é instalado em vários locais. Somente os modelos dos SDKs instalados em 'C:\Program Files\dotnet\sdk\' são exibidos.
Você verá essa mensagem quando tiver pelo menos uma instalação do SDK do .NET Core em um diretório fora de C:\Program Files\dotnet\sdk\. Normalmente, isso acontece quando o SDK do .NET Core foi implantado em um computador usando a função de copiar/colar em vez do instalador MSI.
Desinstale todos os SDKs e runtimes do .NET Core de 32 bits para evitar esse aviso. Para desinstalar, acesse Painel de Controle>Programas e Recursos>Desinstalar ou alterar um programa. Se você entende por que o aviso ocorre e quais são as implicações, pode ignorar o aviso.
Nenhum SDK do .NET Core foi detectado
Na caixa de diálogo Novo Projeto do Visual Studio para o ASP.NET Core, você poderá ver o seguinte aviso:
Nenhum SDK do .NET Core foi detectado, verifique se eles estão incluídos na variável de ambiente
PATH
.Ao executar um comando
dotnet
, o aviso aparece como:Não foi possível localizar nenhum SDK do dotnet instalado.
Esses avisos aparecem quando a variável de ambiente PATH
não aponta para nenhum SDK do .NET Core no computador. Para resolver esse problema:
- Instale o SDK do .NET Core. Obtenha o instalador mais recente em Downloads do .NET.
- Verifique se a variável de ambiente
PATH
aponta para o local onde o SDK está instalado (C:\Program Files\dotnet\
para 64 bits/x64 ouC:\Program Files (x86)\dotnet\
para 32 bits/x86). O instalador do SDK normalmente define oPATH
. Sempre instale os mesmos SDKs de bits e runtimes no mesmo computador.
SDK ausente após a instalação do pacote de hospedagem do .NET Core
A instalação do Pacote de Hospedagem do .NET Core modifica o PATH
quando ele instala o runtime do .NET Core para apontar para a versão de 32 bits (x86) do .NET Core (C:\Program Files (x86)\dotnet\
). Isso pode resultar em SDKs ausentes quando o comando dotnet
do .NET Core de 32 bits (x86) for usado (Nenhum SDK do .NET Core foi detectado). Para resolver esse problema, mude C:\Program Files\dotnet\
para uma posição antes de C:\Program Files (x86)\dotnet\
em PATH
.
Obter dados de um aplicativo
Se um aplicativo for capaz de responder a solicitações, você poderá obter os seguintes dados do aplicativo usando o middleware:
- Solicitação: método, esquema, host, base de caminho, caminho, cadeia de caracteres de consulta, cabeçalhos
- Conexão: endereço IP remoto, porta remota, endereço IP local, porta local, certificado do cliente
- Identity: nome, nome de exibição
- Definições de configuração
- Variáveis de ambiente
Coloque o código de middleware a seguir no início do pipeline de processamento de solicitação do método Startup.Configure
. O ambiente é verificado antes que o middleware seja executado para garantir que o código seja executado apenas no ambiente de desenvolvimento.
Para obter o ambiente, use uma das seguintes abordagens:
Injete o
IHostingEnvironment
no métodoStartup.Configure
e marque o ambiente com a variável local. O código de exemplo a seguir demonstra essa abordagem.Atribua o ambiente a uma propriedade na classe
Startup
. Verifique o ambiente usando a propriedade (por exemplo,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());
});
}
}
Depurar aplicativos ASP.NET Core
Os links a seguir fornecem informações sobre a depuração de aplicativos do ASP.NET Core.
- Depurar o ASP Core no Linux
- Depurar o .NET Core no Unix via SSH
- Início Rápido: depurar o ASP.NET com o depurador do Visual Studio
- Confira este problema do GitHub para obter mais informações de depuração.