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

Vin*_*sca 10 c# iis asp.net-core

我在 Windows 10 机器上将 .NET Core 应用程序部署到 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

仅就这些而言,我会认为项目构建中存在一些问题,或者我安装了一些 .NET Core 包,除了:

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

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

Mar*_*ese 33

与Alex Monkey 的回答类似,我缺少托管捆绑包。

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

您需要单击“Hosting Bundle”一词才能获取正确的安装程序:

下载链接

在此处获取任何版本的 .NET 的托管捆绑包。

  • @LeandroBardelli 你看不出来吗?我的更具体。它指出了由于微软运行时下载网站的外观令人困惑而容易犯的错误。它还提供了图片和更通用的链接。 (4认同)

Ric*_*imo 17

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

\n

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

\n

经过几天的...

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

...这原来是一个应用程序池设置。

\n

在AppPool的高级设置中,有一个“启用32位应用程序”设置,IIS认为默认为False;但我的却是真的。当分别为 False 和 True 时,切换此设置会导致站点工作和失败。

\n

它在我的网站上被设置为 True,因为我们使用来部署我们的网站,并且“IIS AppPool \xe2\x80\x93 Create”步骤有一个与此设置相关的选项;但在 Octopus 中,默认值为 True,因此需要关闭此功能。

\n


Ale*_*key 11

就我而言,目标机器缺少 ASP.NET Core 运行时本身。

https://dotnet.microsoft.com/download/dotnet-core/3.1安装Hosting Bundle后问题已解决

  • 所有版本:https://dotnet.microsoft.com/download/dotnet (6认同)
  • 或最近:https://dotnet.microsoft.com/download/dotnet/5.0 (2认同)

ozz*_*836 9

尽管 99% 的情况下,这可能是由于 .NET/.NET Core 的运行时版本缺失或不正确,但您可以尝试以下操作:

检查 web.config 文件中 aspNetCore XML 元素的arguments 属性是否指向正确的project.dll 文件(并且该文件存在)。

就我而言,我为一个项目有一个完美设置的 web.config 文件,并且倾向于将其复制到新项目中。

有时,我会忘记更改该区域中的参数值,从而产生错误,使您认为这是您的 dotnet 版本的运行时问题。

帮助我实现这一目标的是,它与我的共享托管计划中的空白 .NET6 项目一起工作,因此我知道这不是缺少.NET6 运行时问题。

<aspNetCore 
    processPath="dotnet" 
    arguments=".\YourProject.dll" 
    stdoutLogEnabled="true" 
    stdoutLogFile=".\logs\stdout" hostingModel="inprocess"
>
    <environmentVariables>
        <environmentVariable 
            name="ASPNETCORE_ENVIRONMENT" 
            value="Development" 
        />
    </environmentVariables>
</aspNetCore>
Run Code Online (Sandbox Code Playgroud)

这里:arguments=".\YourProject.dll"


Vin*_*sca 7

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


Jan*_*yev 6

我的修复是:在错误中,它通常会显示它尝试加载哪个版本的运行时,以及它找到的版本。runningdotnet --info给出已安装的 .NET 运行时的列表: 在此输入图像描述

我的缺少 5.0.0。所以我去了https://dotnet.microsoft.com/en-us/download/dotnet/5.0 并扩展了 5.0.0 并安装了我需要的版本。解决方案现在构建良好。 在此输入图像描述


小智 5

我有同样的问题...

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

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

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