【问题标题】:Minimal Hosting Model: Exited from Program.Main with exit code = '0'最小托管模型:从 Program.Main 退出,退出代码 = '0'
【发布时间】:2022-01-16 00:05:48
【问题描述】:

从旧版 Program/Startup 迁移 ASP.NET Core 6 应用以使用 new minimal hosting model 后,我收到了一组无法描述的错误。

错误信息

我已明确启用 UseDeveloperExceptionPage() 以确保安全,但我在浏览器中收到的只是通用的:

HTTP 错误 500.30 - ASP.NET Core 应用无法启动

在事件查看器中,事件 1011 被记录:

物理根目录为“C:\Code”的应用程序“/LM/W3SVC/2/ROOT”已从 Program.Main 退出,退出代码为“0”。请查看 stderr 日志以获取更多信息。

随后是事件 1007:

物理根目录为“C:\Code”的应用程序“/LM/W3SVC/2/ROOT”无法加载 coreclr。

异常消息: CLR 工作线程提前退出

运行 IIS Express 或 Kestrel 时,调试控制台中没有更多信息可用。但是,我可以看到来自我的 Program 的其他启动进程正在被记录,因此知道它们正在正确加载。

代码

这是我的Program 文件的简化版本,删除了自定义组件:

using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.ViewComponents;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews();

var app = builder.Build();

// Should be implicit in Debug mode, but explicitly including to be safe
app.UseDeveloperExceptionPage();

app.UseStaticFiles();
app.UseRouting();

app.MapControllers();

以前的话题

由于这些是真正一般性错误,因此之前有很多与此问题相关的可用线程,但似乎没有一个适用于这种情况。 (很多都与ASP.NET Core Hosting Bundle 有关,我没有使用。)

问题

此问题是否存在常见原因?或者,是否有其他方法可以调试此场景?

【问题讨论】:

  • FWIW:这似乎是一个“错字”问题。它是。但这是我让来自两个不同客户的两个开发人员联系我的公司的一个问题,所以我决定发布一个问答,因为如果您不熟悉托管模型,错误消息不会立即明显。由于 Program 在历史上是大多数人忽略的样板代码,因此在执行迁移时显然很容易错过。

标签: asp.net-core asp.net-core-6.0 asp.net-core-minimal-hosting-model


【解决方案1】:

错误消息不是很直观,但这个错误本质上意味着应用程序运行,然后立即退出。造成这种情况的一个常见原因是您忽略在Program 末尾添加Run() 命令:

app.Run();

背景

如果您专注于从 Startup 类迁移 ConfigureServices()Configure() 方法,则很容易错过这一点。虽然您以前的大部分配置代码可能都存在于该类中,但 Run() 方法是需要从您的旧 Program 类迁移的几个部分之一。您可能会从旧的Main() 方法中认出它;例如,

public static void Main(string[] args) => CreateHostBuilder(args).Build().Run();

在新的 ASP.NET Core 6 最小托管模型中,这被转换为:

var builder = WebApplication.CreateBuilder(args);

// Configuration from Startup.ConfigureService()

var app = builder.Build();

// Configuration from Startup.Configure()

app.Run();

当它从Program.Main() 退出并带有退出代码0 时,这表明您的Program 运行正确——因此,可以看到您的配置代码的日志记录——但是它在没有实际启动您的Web 应用程序的情况下就停止了.

只要你知道要寻找它,就可以进行简单的修复。

【讨论】:

  • 我自己发现了这个问题。创建新项目并进行比较。不容易发现,但与众不同!
  • @Heddelin:是的!我觉得发布这么简单的东西有点傻。但它很容易被忽视,而且是一个令人困惑的错误信息,我相信会有更多的人遇到它。
猜你喜欢
  • 2014-01-05
  • 1970-01-01
  • 2014-06-24
  • 1970-01-01
  • 2019-05-30
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多