Modelo de alojamiento mínimo: Salió del programa. Main con código de salida = ‘0’
Después de migrar una aplicación ASP.NET Core 6 del modelo heredado Program
/Startup
al uso del nuevo modelo de hospedaje minimalista, estoy recibiendo un conjunto de errores poco descriptivos.
Mensajes de error
He habilitado explícitamente UseDeveloperExceptionPage()
para estar seguro, pero todo lo que recibo en el navegador es el genérico:
HTTP Error 500.30 – Fallo en el inicio de la aplicación ASP.NET Core
En el Visor de eventos, se registra el Evento 1011:
La aplicación ‘/LM/W3SVC/2/ROOT’ con la raíz física ‘C:\Code\’ ha salido de Program.Main con código de salida ‘0’. Por favor, comprueba los registros de stderr para obtener más información.
A continuación, el Evento 1007:
La aplicación ‘/LM/W3SVC/2/ROOT’ con la raíz física ‘C:\Code\’ no ha podido cargar coreclr.
Mensaje de excepción:
Hilo de trabajador de CLR ha salido prematuramente.
No hay más información disponible en la consola de depuración al ejecutar IIS Express o Kestrel. Sin embargo, puedo ver otros procesos iniciales de mi Program
que se registran, por lo que sé que se están cargando correctamente.
Código
Esta es una versión simplificada de mi archivo Program
, con componentes personalizados eliminados:
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.ViewComponents;</p>
<p>var builder = WebApplication.CreateBuilder(args);</p>
<p>builder.Services.AddControllersWithViews();</p>
<p>var app = builder.Build();</p>
<p>// Debería ser implícito en modo de depuración, pero se incluye explícitamente para estar seguro
app.UseDeveloperExceptionPage();</p>
<p>app.UseStaticFiles();
app.UseRouting();</p>
<p>app.MapControllers();
Hilos anteriores
Como estos errores son realmente generales, hay bastantes hilos anteriores disponibles relacionados con este problema, pero ninguno parece aplicarse a este caso. (Muchos tienen que ver con el paquete de hospedaje de ASP.NET Core, que no estoy utilizando.)
Pregunta
¿Existen causas comunes para este problema? Alternativamente, ¿hay otros enfoques para depurar este escenario?
davy.ai
Cuando se migra al nuevo modelo de alojamiento mínimo con ASP.NET Core 6, hay algunas causas comunes para recibir mensajes de error no descriptivos como los que estás experimentando. Aquí tienes algunas sugerencias sobre cómo abordar la depuración de este escenario:
1. Verificar la versión del tiempo de ejecución de .NET
Asegúrate de que la versión del tiempo de ejecución de .NET instalada en la máquina coincida con la versión especificada en el archivo de proyecto. Por ejemplo, si estás apuntando a .NET 6.0, verifica que el tiempo de ejecución de .NET 6.0 esté instalado en la máquina. Esto se puede encontrar en la página de descarga del SDK de Microsoft .NET Core.
2. Verificar las dependencias del proyecto
Asegúrate de que todas las dependencias necesarias estén referenciadas por tu proyecto. El nuevo modelo de alojamiento mínimo requiere un conjunto mínimo de dependencias para que tu aplicación funcione. Si falta alguna dependencia, es posible que recibas mensajes de error no descriptivos.
3. Verificar otros archivos de configuración
Asegúrate de que otros archivos de configuración en tu proyecto, como
appsettings.json
, estén configurados correctamente para funcionar bajo el nuevo modelo de alojamiento mínimo. Debido a que el nuevo modelo de alojamiento es relativamente nuevo, puede haber errores en los archivos de configuración que hagan que tu aplicación falle.4. Verificar los registros de
stderr
Asegúrate de revisar los registros de
stderr
, como se sugiere en el Visor de eventos. Esto debería proporcionar más información sobre por qué coreclr no pudo cargarse y puede ayudarte a aislar el problema.5. Verificar la configuración de IIS
Si estás utilizando IIS para alojar tu aplicación, asegúrate de que la configuración de IIS esté correctamente configurada para el nuevo modelo de alojamiento mínimo. Verifica que la configuración del grupo de aplicaciones se haya configurado correctamente para usar la versión correcta de .NET y que se hayan tenido en cuenta cualquier cambio en las variables de entorno o en los puertos de red de la aplicación.
6. Utilizar el método
WaitForDebugger
Si aún tienes problemas, puedes utilizar el método
WaitForDebugger
para pausar el inicio de la aplicación y adjuntar un depurador a ella. Esto puede ayudarte a aislar problemas en el código de inicio.Aquí, el inicio de la aplicación se pausará y se te pedirá que adjuntes un depurador. Una vez adjuntado el depurador, puedes ejecutar el código paso a paso y aislar cualquier problema que encuentres.
Siguiendo estos pasos, deberías poder aislar los problemas que estás experimentando y ver mensajes de error más específicos que te ayudarán a resolver el problema.