HTTP 错误 500.31 - 无法加载 ASP.NET Core 运行时

Posted

技术标签:

【中文标题】HTTP 错误 500.31 - 无法加载 ASP.NET Core 运行时【英文标题】:HTTP Error 500.31 - Failed to load ASP.NET Core runtime 【发布时间】:2020-12-16 05:52:25 【问题描述】:

我在将 .NET Core 应用程序部署到 Windows 10 机器上的 IIS 时遇到问题。

当我部署到 IIS 并导航到该站点时,我会收到以下消息:

"HTTP Error 500.31 - Failed to load ASP.NET Core runtime
Common solutions to this issue:
The specified version of Microsoft.NetCore.App or Microsoft.AspNetCore.App was not found.
Troubleshooting steps:
Check the system event log for error messages
Enable logging the application process' stdout messages
Attach a debugger to the application process and inspect
For more information visit: https://go.microsoft.com/fwlink/?LinkID=2028526

在我的事件查看器中,每次调用页面都会生成 3 条错误消息。

    无法找到应用程序依赖项。确保已安装应用所针对的 Microsoft.NetCore.App 和 Microsoft.AspNetCore.App 版本。

    找不到“aspnetcorev2_inprocess.dll”。异常信息:

    无法启动应用程序“/LM/W3SVC/4/ROOT”,错误代码“0x8000ffff”。

仅凭这些,我就会陷入困境,认为项目的构建中存在一些问题,或者我安装的一些 .NET Core 包可能存在问题,除了:

    我还有两个在不同端口上运行的 .NET Core 3.1 站点。事实上,如果我将文件从工作站点的目录复制到非工作站点的目录,它们将不会通过 IIS 运行。如果我将文件从非工作站点的目录复制到工作站点,这些文件将通过 IIS 运行。 如果我单击任何站点的可执行文件并导航到指定的本地主机,它们就可以在 Web 浏览器中打开。 我可以在同一系统上的任何位置运行各种依赖于框架且自包含的 .Net Core 3.1 和 .Net Core 5.0 控制台应用程序。 这两个正常工作的网站在我第一次发布时显示相同的错误消息。我尝试调整设置、重新安装运行时等,但未能隔离导致它们在第一次尝试部署几个小时后开始运行的任何原因。 应用程序池中的设置或网站本身在正常工作的网站和不正常工作的网站之间没有明显差异。

我认为我配置 IIS、站点或应用程序池的方式肯定存在一些问题,但我可以说没有任何区别。如果有人遇到过这种情况,我很乐意听取建议。

【问题讨论】:

能否分享一下你的IIS网站文件结构?你如何托管新的两个应用程序?您创建了两个新的 Web 应用程序? 如果您不熟悉 IIS,则不容易观察到差异。运行报告docs.jexusmanager.com/tutorials/ancm-diagnostics.html,看看他们说了什么。 @LexLi - 你制作了多么棒的工具!我能够快速运行 net-core 诊断并发现应用程序池没有对站点文件夹的权限。快速轻松地修复数小时的故障排除。 从 Visual Studio 发布时忽略设置“自包含”部署模式时出现此错误。 在哪里可以找到这个神奇的工具!链接都坏了。 【参考方案1】:

在我的例子中,目标机器缺少 ASP.NET Core 运行时本身。

安装 Hosting Bundle 后问题已解决 .Net Core 3.1

【讨论】:

或最近:dotnet.microsoft.com/download/dotnet/5.0 所有版本:dotnet.microsoft.com/download/dotnet【参考方案2】:

我在 IIS 服务器上收到了与新的 .NET Core 3.1 框架相关的 Web 应用程序相同的错误消息,该服务器已经托管了其他 .NET Core 3.1 框架相关的 Web 应用程序,没有任何问题。事件查看器中的消息略有不同;但也很难找到 - 有时我看不到任何似乎相关的事件。

如果我将网站转换为独立的“win-x86”,它可以工作;但独立的“win-x64”不起作用。

经过几天的……

读取错误消息中链接的 Microsoft URL 上的信息, 从命令行运行网站(没问题), 在 IIS 服务器上检查 dotnet --info, 在构建服务器上检查dotnet --info, 盯着 JSON 配置文件、项目文件、构建设置、发布设置和 IIS 设置

...原来是 AppPool 设置。

在AppPool的Advanced Settings中,有一个“Enable 32-Bit Applications”设置,IIS认为默认为False;但对我来说是真的。切换此设置会导致站点工作和失败,分别为 False 和 True。

因为我们使用octopusdeploy 来部署我们的站点,所以在我的站点上它已设置为 True,并且“IIS AppPool – 创建”步骤有一个与此设置相关的选项;但在 Octopus 中,默认值为 True,因此需要关闭。

【讨论】:

哇,伙计!击败我,您如何确定应用程序池设置是罪魁祸首,但肯定是。正是你说的。它解决了我的问题!非常感谢 @Tarik.J 我的线索是 “如果我将网站转换为独立的“win-x86”,它可以工作;但独立的“win-x64”没有'不行。” @Richardissimo 在我的情况下它不起作用。我正在开发 .Net 5.0 项目。我有另一个运行在不同端口上的 .Net 5.0 应用程序并且工作正常。我目前正在重新创建构建以将目标运行时选项设置为 win-x64(以前它被设置为可移植)。 @Noor 我回答的关键部分是否适用于您的情况:If I converted the site to stand-alone "win-x86", it worked; but stand-alone "win-x64" didn't work. ? 这解决了我在 .NET 6.0 的情况,同样的修复。【参考方案3】:

使用@LexLi 建议(和创建)的工具,我能够确定问题是由于应用程序池没有对站点文件夹的权限引起的。授予它权限解决了这个问题。从错误消息中并不清楚这一点。在这里回答,以防其他人遇到相同的错误消息。

【讨论】:

我安装了该工具,但不知道如何使用它。有什么帮助吗? 您必须以管理员身份运行才能查看您的服务器。然后,当您在左侧树中突出显示您的站点时,右侧会出现一个“ASP.NET Core 诊断”链接。虽然我认为我得到了它的工作,但它并没有让我更接近于找出我的问题。 检查@Alex Monkey 的答案,解决问题。【参考方案4】:

类似于Alex Monkey's answer,我缺少托管包。

更具体地说,我的问题是我不小心安装了只是运行时,而不是托管包。我假设下图中的“x64”链接会下载捆绑包的 x64 版本,但事实并非如此。

您需要点击“Hosting Bundle”来获取正确的安装程序:

获取任何版本的 .NET here 的托管包。

【讨论】:

这个答案和 Alex Monkey 的答案有什么区别? @LeandroBardelli 你看不出来?我的更具体。它指出了一个容易犯的错误,因为微软的运行时下载网站的外观令人困惑。它还提供了一张图片和一个更通用的链接。【参考方案5】:

我遇到了同样的问题...

我的解决方案非常简单,同时有点尴尬:) 我认为 asp.net 核心主机包是向下兼容的。

解决方案:我的应用程序配置为 3.1。作为目标框架,但我在 iis 上安装了 5.0.9 托管包。

在我安装了正确版本的托管包后,3.1.版本,成功了!

【讨论】:

【参考方案6】:

我通过在发布过程中将部署模式从依赖框架更改为自包含解决了此错误。不确定此更改如何解决此问题,但它对我有用。我使用 .NET 5。

【讨论】:

如果我没记错的话,这也是我的场景中的一个症状 - 由于需要额外的资源,我只是不准备接受将网站作为独立的解决方案.我的回答是否能解决您的问题可能值得一看。【参考方案7】:

对我来说,我必须同时安装 .NET 5 和 .NET Core 3.1。这里的一些人建议下载 3.1(我的应用程序的目标是 3.1),但是当我访问 Microsoft 网站时,它“推荐”最新版本,在本文发布时是 5.0 (https://dotnet.microsoft.com/download/dotnet/5.0)。

好吧,仅 5.0 就会导致(HTTP 错误 500.31 - 无法加载 ASP.NET Core 运行时)问题。

在我安装了 3.1 之后,我终于能够修复它https://dotnet.microsoft.com/download/dotnet-core/3.1。

【讨论】:

【参考方案8】:

部署后我在生产中遇到了同样的问题。请检查所有 dll 是否部署在生产服务器上。在我的情况下,缺少一个 dll。我刚刚上传了那个 dll,它就成功了。

【讨论】:

【参考方案9】:

部署几天后,我在生产中遇到了这个问题。突然停止处理错误(HTTP 错误 500.31 - 无法加载 ASP.NET Core 运行时)。就我而言,我刚刚修复了已安装的版本并且它工作正常。

【讨论】:

【参考方案10】:

有时它有助于回收应用程序池。

【讨论】:

【参考方案11】:

在我的情况下,问题是 IIS 服务器具有所需的 Microsoft.AspNetCore.App 5.0 版本,当我运行 dotnet cmd 时,我注意到它只安装了 Microsoft.AspNetCore.App 6.0。 通过查阅deps.json文件,我在IIS服务器上找到了需要的Microsoft.AspNetCore.App版本。

https://social.msdn.microsoft.com/Forums/en-US/20b5e111-11bd-4a9a-85fe-0522112ce84d/need-help-with-resolving-http-error-50031-on-iis?forum=aspdotnetcore

【讨论】:

【参考方案12】:

经过长时间的痛苦搜索,我的问题出在我的 .runtimeconfig.json 文件中

由于某种原因,它有 "tfm": "net3.1" 和 "version : "3.1.0"。我的修复。

"runtimeOptions": 
"tfm": "net5.0",
"framework": 
  "name": "Microsoft.AspNetCore.App",
  "version": "6.0.2"
,

【讨论】:

以上是关于HTTP 错误 500.31 - 无法加载 ASP.NET Core 运行时的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 无法在 IIS 下运行:HTTP 错误 500.0 - ANCM 进程内处理程序加载失败

ASP.NET Core 无法在 IIS 下运行:HTTP 错误 500.0 - ANCM 进程内处理程序加载失败

ASP.NET MVC 页面无法加载并显示“找不到资源”

ASP.NET MVC 强类型部分视图,给出无法加载类型错误

HTTP 错误 500.32 - 将自包含 .Net Core 3.1 应用程序部署到 Azure 后,ANCM 无法加载 dll

无法加载类型 ASP.ViewSwitcher