Solución de problemas y depuración de proyectos de ASP.NET CoreTroubleshoot and debug ASP.NET Core projects

Por Rick AndersonBy Rick Anderson

En los vínculos siguientes se proporciona una guía de solución de problemas:The following links provide troubleshooting guidance:

Advertencias del SDK de .NET Core.NET Core SDK warnings

Se instalaron las versiones de 32 y 64 bits del SDK de .NET CoreBoth the 32-bit and 64-bit versions of the .NET Core SDK are installed

En el cuadro de diálogo Nuevo proyecto de ASP.NET Core, puede ver la siguiente advertencia:In the New Project dialog for ASP.NET Core, you may see the following warning:

Se instalaron las versiones de 32 y 64 bits del SDK de .NET Core.Both 32-bit and 64-bit versions of the .NET Core SDK are installed. Solo se mostrarán las plantillas de las versiones de 64 bits instaladas en "C:\Archivos de programa\dotnet\sdk\".Only templates from the 64-bit versions installed at 'C:\Program Files\dotnet\sdk\' are displayed.

Esta advertencia aparece si se instalan las versiones de 32 bits (x86) y 64 bits (x64) del SDK de .NET Core.This warning appears when both 32-bit (x86) and 64-bit (x64) versions of the .NET Core SDK are installed. Entre los motivos habituales por los que pueden estar instaladas ambas versiones se encuentran los siguientes:Common reasons both versions may be installed include:

  • En un principio, descargó el instalador del SDK de .NET Core con un equipo de 32 bits, pero después lo copió e instaló en un equipo 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.
  • Otra aplicación ha instalado el SDK de .NET Core de 32 bits.The 32-bit .NET Core SDK was installed by another application.
  • Se ha descargado e instalado la versión incorrecta.The wrong version was downloaded and installed.

Desinstale el SDK de .NET Core de 32 bits para evitar que aparezca esta advertencia.Uninstall the 32-bit .NET Core SDK to prevent this warning. Desinstálelo en Panel de control > Programas y características > Desinstalar o cambiar un programa.Uninstall from Control Panel > Programs and Features > Uninstall or change a program. Si comprende por qué se produce la advertencia y sus implicaciones, puede omitirla.If you understand why the warning occurs and its implications, you can ignore the warning.

El SDK de .NET Core está instalado en varias ubicacionesThe .NET Core SDK is installed in multiple locations

En el cuadro de diálogo Nuevo proyecto de ASP.NET Core, puede ver la siguiente advertencia:In the New Project dialog for ASP.NET Core, you may see the following warning:

El SDK de .NET Core está instalado en varias ubicaciones.The .NET Core SDK is installed in multiple locations. Solo se mostrarán las plantillas de los SDK instalados en "C:\Archivos de programa\dotnet\sdk\".Only templates from the SDKs installed at 'C:\Program Files\dotnet\sdk\' are displayed.

Verá este mensaje si tiene al menos una instalación del SDK de .NET Core en un directorio fuera de C:\Archivos de programa\dotnet\sdk\ .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\. Esto suele suceder si el SDK de .NET Core se ha implementado en un equipo mediante el método de copiar y pegar en lugar de con el instalador de 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 los SDK y los entornos de ejecución de .NET Core de 32 bits para evitar que aparezca esta advertencia.Uninstall all 32-bit .NET Core SDKs and runtimes to prevent this warning. Desinstálelo en Panel de control > Programas y características > Desinstalar o cambiar un programa.Uninstall from Control Panel > Programs and Features > Uninstall or change a program. Si comprende por qué se produce la advertencia y sus implicaciones, puede omitirla.If you understand why the warning occurs and its implications, you can ignore the warning.

No se ha detectado ningún SDK de .NET CoreNo .NET Core SDKs were detected

  • En el cuadro de diálogo Nuevo proyecto de Visual Studio de ASP.NET Core, puede ver la siguiente advertencia:In the Visual Studio New Project dialog for ASP.NET Core, you may see the following warning:

    No se ha detectado ningún SDK de .NET Core, asegúrese de que se incluyen en la variable de entorno PATH.No .NET Core SDKs were detected, ensure they are included in the environment variable PATH.

  • Al ejecutar un comando dotnet, la advertencia aparece como:When executing a dotnet command, the warning appears as:

    No se pudo encontrar ningún SDK de dotnet instalado.It was not possible to find any installed dotnet SDKs.

Estas advertencias aparecen si la variable de entorno PATH no apunta a ningún SDK de .NET Core en el equipo.These warnings appear when the environment variable PATH doesn't point to any .NET Core SDKs on the machine. Para resolver este problema:To resolve this problem:

  • Instale el SDK de .NET Core.Install the .NET Core SDK. Obtenga el instalador más reciente en Descargas de .NET.Obtain the latest installer from .NET Downloads.
  • Compruebe que la variable de entorno PATH apunta a la ubicación en la que está instalado el SDK (C:\Program Files\dotnet\ para 64 bits/x64 o 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). Normalmente, el instalador del SDK establece el valor de PATH.The SDK installer normally sets the PATH. Instale siempre los mismos valores de bits de los SDK y los entornos de ejecución en el mismo equipo.Always install the same bitness SDKs and runtimes on the same machine.

Falta el SDK después de instalar el conjunto de hospedaje de .NET CoreMissing SDK after installing the .NET Core Hosting Bundle

Al instalar el conjunto de hospedaje de .NET Core se modifica el valor de PATH cuando instala el entorno de ejecución de .NET Core para que apunte a la versión de 32 bits (x86) de .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\). Esto puede dar lugar a que falten SDK cuando se usa el comando dotnet de 32 bits (x86) de .NET Core (No se ha detectado ningún SDK de .NET Core).This can result in missing SDKs when the 32-bit (x86) .NET Core dotnet command is used (No .NET Core SDKs were detected). Para solucionar este problema, mueva C:\Program Files\dotnet\ a una posición antes de C:\Program Files (x86)\dotnet\ en PATH.To resolve this problem, move C:\Program Files\dotnet\ to a position before C:\Program Files (x86)\dotnet\ on the PATH.

Obtención de datos de una aplicaciónObtain data from an app

Si una aplicación es capaz de responder a las solicitudes, puede obtener los siguientes datos de la aplicación mediante middleware:If an app is capable of responding to requests, you can obtain the following data from the app using middleware:

  • Solicitud: método, esquema, host, ruta de acceso base, ruta de acceso, cadena de consulta, encabezadosRequest – Method, scheme, host, pathbase, path, query string, headers
  • Conexión: dirección IP remota, puerto remoto, dirección IP local, puerto local, certificado de clienteConnection – Remote IP address, remote port, local IP address, local port, client certificate
  • Identidad: nombre, nombre para mostrarIdentity – Name, display name
  • Valores de configuraciónConfiguration settings
  • Variables de entornoEnvironment variables

Coloque el siguiente código de middleware al principio de la canalización de procesamiento de solicitudes del método Startup.Configure.Place the following middleware code at the beginning of the Startup.Configure method's request processing pipeline. El entorno se comprueba antes de que se ejecute el middleware para asegurarse de que el código solo se ejecuta en el entorno de desarrollo.The environment is checked before the middleware is run to ensure that the code is only executed in the Development environment.

Para obtener el entorno, use cualquiera de los enfoques siguientes:To obtain the environment, use either of the following approaches:

  • Inserte IHostingEnvironment en el método Startup.Configure y compruebe el entorno con la variable local.Inject the IHostingEnvironment into the Startup.Configure method and check the environment with the local variable. En el siguiente ejemplo de código se muestra este enfoque.The following sample code demonstrates this approach.

  • Asigne el entorno a una propiedad de la clase Startup.Assign the environment to a property in the Startup class. Compruebe el entorno con la propiedad (por ejemplo, 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());
        });
    }
}

Depuración de aplicaciones ASP.NET CoreDebug ASP.NET Core apps

En los vínculos siguientes se proporciona información sobre la depuración de aplicaciones ASP.NET Core.The following links provide information on debugging ASP.NET Core apps.