.NET Core 3.1 WebAPI IISExpress 在调试时挂起

.NET Core 3.1 WebAPI IISExpress Hangs on Debug

运行 以下最新版本(撰写本文时):

Visual Studio 2019 16.4.5
.NET 核心 SDK 3.1.102 x64

已测试的浏览器:

我最近将几个 .Net Core 2.1 升级到了 3.1。

进行必要的更改以迁移到 3.1 后,我开始测试并注意到 IISExpress 在打开新浏览器时 "hang" window 并且从不加载我们的启动 URL .

检查 Visual Studio 中的输出 window,我注意到主机设置不符合我项目的 launchSettings.json - 使用的是 http://localhost:5000/ and http://localhost:5001/ 的默认设置。

我可以打开一个新的浏览器 window 并导航到那些 URL,它们会加载得很好。

尝试从我的本地 TFS 存储库中删除我的 .vs 文件夹。 Nuked 我的本地副本并将其从 TFS 中删除。没有运气。

有人知道可能导致此问题的更改吗?

问题 (?) 是项目属性中的新设置默认值:

默认设置为 "In Process"。将其更改为 "Out of Process" 将 return 您的预期行为。此更改是在 .NET Core 2.2 中引入的,目的是通过不通过单独的 Web 堆栈代理 Web 请求来帮助提高性能。

如果您想利用进程内托管提供的更好性能,请将其添加到您的 program.cs 文件中,在您对 WebHostBuilder 的 "UseKestrel()" 调用之后的行 -

.ConfigureKestrel((context, options) => {})

运行 今天也是如此(net core 2 -> 3.1)。您可以使用 in/out 的进程,但是一旦我部署和使用 IIS,这就会给我带来问题。对我来说,修复就像使用默认的 3.1 模板一样简单:

var host = Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>
{
    webBuilder.UseStartup<Startup>();
})
.Build();

host.Run();

我还不明白这些扩展方法背后的所有魔法,所以这有点cargo-culty,但它似乎有效并且符合标准设置。