Solucionar problemas de projetos ASP.NET CoreTroubleshoot ASP.NET Core projects

Por Rick AndersonBy Rick Anderson

Os links a seguir fornecem orientação para a solução de problemas:The following links provide troubleshooting guidance:

Avisos de SDK do .NET Core.NET Core SDK warnings

As versões de 32 bits e 64 bits do SDK do .NET Core estão instaladasBoth the 32-bit and 64-bit versions of the .NET Core SDK are installed

Na caixa de diálogo novo projeto para ASP.NET Core, você poderá ver o seguinte aviso:In the New Project dialog for ASP.NET Core, you may see the following warning:

As versões de 32 bits e 64 bits do SDK do .NET Core estão instaladas.Both 32-bit and 64-bit versions of the .NET Core SDK are installed. Somente os modelos das versões de 64 bits instaladas em ' C\: arquivos\de\programas\SDK do dotnet ' são exibidos.Only templates from the 64-bit versions installed at 'C:\Program Files\dotnet\sdk\' are displayed.

Esse aviso aparece quando as versões de 32 bits (x86) e 64 de bits (x64) do SDK do .NET Core são instaladas.This warning appears when both 32-bit (x86) and 64-bit (x64) versions of the .NET Core SDK are installed. Os motivos comuns pelos quais ambas as versões podem ser instaladas incluem:Common reasons both versions may be installed include:

  • Você baixou originalmente o instalador do SDK do .NET Core usando um computador de 32 bits, mas o copiou e o instalou em um computador de 64 bits.You originally downloaded the .NET Core SDK installer using a 32-bit machine but then copied it across and installed it on a 64-bit machine.
  • O SDK do .NET Core de 32 bits foi instalado por outro aplicativo.The 32-bit .NET Core SDK was installed by another application.
  • A versão errada foi baixada e instalada.The wrong version was downloaded and installed.

Desinstale o SDK do .NET Core de 32 bits para evitar esse aviso.Uninstall the 32-bit .NET Core SDK to prevent this warning. Desinstalar deprogramas e recursos > do painel > de controledesinstalar ou alterar um programa.Uninstall from Control Panel > Programs and Features > Uninstall or change a program. Se você entender por que o aviso ocorre e suas implicações, poderá ignorar o aviso.If you understand why the warning occurs and its implications, you can ignore the warning.

O SDK do .NET Core é instalado em vários locaisThe .NET Core SDK is installed in multiple locations

Na caixa de diálogo novo projeto para ASP.NET Core, você poderá ver o seguinte aviso:In the New Project dialog for ASP.NET Core, you may see the following warning:

O SDK do .NET Core é instalado em vários locais.The .NET Core SDK is installed in multiple locations. Somente os modelos dos SDKs instalados em ' C:\arquivos\de programas\SDK\do dotnet ' são exibidos.Only templates from the SDKs installed at 'C:\Program Files\dotnet\sdk\' are displayed.

Você verá essa mensagem quando tiver pelo menos uma instalação do SDK do .NET Core em um diretório fora de C:\arquivos\de\programas SDK do\dotnet.You see this message when you have at least one installation of the .NET Core SDK in a directory outside of C:\Program Files\dotnet\sdk\. Geralmente isso acontece quando o SDK do .NET Core foi implantado em um computador usando copiar/colar em vez do instalador MSI.Usually this happens when the .NET Core SDK has been deployed on a machine using copy/paste instead of the MSI installer.

Desinstale todos os SDKs e tempos de execução do .NET Core de 32 bits para evitar esse aviso.Uninstall all 32-bit .NET Core SDKs and runtimes to prevent this warning. Desinstalar deprogramas e recursos > do painel > de controledesinstalar ou alterar um programa.Uninstall from Control Panel > Programs and Features > Uninstall or change a program. Se você entender por que o aviso ocorre e suas implicações, poderá ignorar o aviso.If you understand why the warning occurs and its implications, you can ignore the warning.

Nenhum SDK do .NET Core foi detectadoNo .NET Core SDKs were detected

  • Na caixa de diálogo novo projeto do Visual Studio para ASP.NET Core, você poderá ver o seguinte aviso:In the Visual Studio New Project dialog for ASP.NET Core, you may see the following warning:

    Nenhum SDK do .NET Core foi detectado, verifique se eles estão incluídos na variável PATHde ambiente.No .NET Core SDKs were detected, ensure they are included in the environment variable PATH.

  • Ao executar um dotnet comando, o aviso aparece como:When executing a dotnet command, the warning appears as:

    Não foi possível encontrar nenhum SDKs dotnet instalado.It was not possible to find any installed dotnet SDKs.

Esses avisos aparecem quando a variável PATH de ambiente não aponta para nenhum SDK do .NET Core no computador.These warnings appear when the environment variable PATH doesn't point to any .NET Core SDKs on the machine. Para resolver esse problema:To resolve this problem:

  • Instale o SDK do .NET Core.Install the .NET Core SDK. Obtenha o instalador mais recente de downloads do .net.Obtain the latest installer from .NET Downloads.
  • Verifique se a PATH variável de ambiente aponta para o local onde o SDK está instaladoC:\Program Files\dotnet\ (para 64 bits/x64 ou C:\Program Files (x86)\dotnet\ para 32 bits/x86).Verify that the PATH environment variable points to the location where the SDK is installed (C:\Program Files\dotnet\ for 64-bit/x64 or C:\Program Files (x86)\dotnet\ for 32-bit/x86). O instalador do SDK normalmente define PATHo.The SDK installer normally sets the PATH. Sempre instale os mesmos SDKs de bits e tempos de execução no mesmo computador.Always install the same bitness SDKs and runtimes on the same machine.

SDK ausente após a instalação do pacote de hospedagem do .NET CoreMissing SDK after installing the .NET Core Hosting Bundle

A instalação do pacote de hospedagem do .NET Core modifica o PATH quando ele instala o tempo de execução do .NET Core para apontar para a versão de 32 bits (x86) do .NET Core (C:\Program Files (x86)\dotnet\).Installing the .NET Core Hosting Bundle modifies the PATH when it installs the .NET Core runtime to point to the 32-bit (x86) version of .NET Core (C:\Program Files (x86)\dotnet\). Isso pode resultar na ausência de SDKs quando o comando .NET Core dotnet de 32 bits (x86) for usado (nenhum SDK do .NET Core foi detectado).This can result in missing SDKs when the 32-bit (x86) .NET Core dotnet command is used (No .NET Core SDKs were detected). Para resolver esse problema, mova C:\Program Files\dotnet\ para uma posição anterior C:\Program Files (x86)\dotnet\ no PATH.To resolve this problem, move C:\Program Files\dotnet\ to a position before C:\Program Files (x86)\dotnet\ on the PATH.

Obter dados de um aplicativoObtain data from an app

Se um aplicativo for capaz de responder às solicitações, você poderá obter os seguintes dados do aplicativo usando o middleware:If an app is capable of responding to requests, you can obtain the following data from the app using middleware:

  • Método – de solicitação, esquema, host, pathbase, caminho, Cadeia de caracteres de consulta, cabeçalhosRequest – Method, scheme, host, pathbase, path, query string, headers
  • Endereço – IP remoto de conexão, porta remota, endereço IP local, porta local, certificado de clienteConnection – Remote IP address, remote port, local IP address, local port, client certificate
  • Nome – da identidade, nome de exibiçãoIdentity – Name, display name
  • Definições de configuraçãoConfiguration settings
  • Variáveis de ambienteEnvironment variables

Coloque o seguinte código de middleware no início do Startup.Configure pipeline de processamento de solicitação do método.Place the following middleware code at the beginning of the Startup.Configure method's request processing pipeline. O ambiente é verificado antes que o middleware seja executado para garantir que o código seja executado apenas no ambiente de desenvolvimento.The environment is checked before the middleware is run to ensure that the code is only executed in the Development environment.

Para obter o ambiente, use uma das seguintes abordagens:To obtain the environment, use either of the following approaches:

  • Insira o IHostingEnvironment Startup.Configure no método e verifique o ambiente com a variável local.Inject the IHostingEnvironment into the Startup.Configure method and check the environment with the local variable. O código de exemplo a seguir demonstra essa abordagem.The following sample code demonstrates this approach.

  • Atribua o ambiente a uma propriedade na Startup classe.Assign the environment to a property in the Startup class. Verifique o ambiente usando a propriedade (por exemplo, if (Environment.IsDevelopment())).Check the environment using the property (for example, 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());
        });
    }
}