模块 "aspnetcorev2.dll" 加载失败

The Module "aspnetcorev2.dll" failed to load

最近我尝试在一台机器上安装 ASP.NET Core/.NET Core: Runtime & Hosting Bundle version 2.2 运行 Windows服务器 2008 R2 SP1。但是,在安装 IIS 后,IIS 停止工作并为其中托管的所有应用程序提供 503 Service unavailable 错误。检查应用程序池后,我发现池刚刚关闭。

在事件查看器中我可以看到以下错误消息 -

The Module DLL C:\Program Files (x86)\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll failed to load. The data is the error.

我已经尝试将池设置为 32/64 位,但错误是一样的。其他人是否遇到过这个问题或对此有解决方案?

那个aspnetcorev2.dll实际上是ASP.NET Core 2.0 Module,俗称ANCM。如果 ASP.NET Core 2.0/2.1/2.2 将在 IIS 之上 运行 并在转到 ASP.NET Core original 之前使用 IIS 作为主代理,则此模块需要一些设置和配置Kestrel引擎,也叫进程外模型。

这很重要,在 Windows 以外的其他平台上,所有请求都直接发送到 Kestrel 并由 Kestrel 直接提供服务。因此在 IIS 上,需要进行特殊的配置设置才能在 IIS 上使用 Kestrel。

关于IIS上ANCM的更多信息,请参考微软官方文档: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.2

注意:虽然该页面适用于 .NET Core 2.2,但它仍然适用于 .NET 2.0/2.1。

根据您的错误,ANCM DLL 可能不在您应用生成的 DLL 的范围内。确保 ANCM dll 文件位于生成的编译文件夹内,而不是外部。还要确保您使用的是 RTM 或官方发布版本的 .NET Core 2.0/2.1/2.2 运行time 而不是每日构建,因为使用每日构建的 .NET Core 2.0/2.1/2.2 可能会带来一些奇怪的错误因为他们 运行time DLL 的完整分布可能不完全一致。

有关 ASP.NET Core 2.x 中 ANCM 故障排除的更多信息,请参阅此官方 MS 文档: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/troubleshoot?view=aspnetcore-2.2

更新#1:

根据下面的评论,我添加了以下附加信息: 你应该清除你机器上的所有 nuget 缓存,恢复并再次 运行 MSBUILD。如果您使用 .NET Core 2.1 作为您的 ASP.NET Core 2.1 应用程序的平台,那么如果您安装 .NET Core 2.2 而没有将您的应用程序的引用更新到 v2.2,那么引用仍然可能会混淆。

或者为了更好的实践,使用 global.json 文件来严格编译您的应用程序以始终使用具有特定版本的 .NET Core 2.1 SDK,无论您使用的是什么最新版本的 .NET Core SDK你的机器。 这一点也很重要,因为 默认情况下 编译 .NET Core 应用程序将始终尝试使用您计算机上可用的最新 SDK,并且将忽略之前存在的旧版本。

设置 global.json 记录在此处: https://docs.microsoft.com/en-us/dotnet/core/tools/global-json

阅读完以下文件后-

Troubleshoot ASP.NET Core on IIS

Common errors reference for Azure App Service and IIS with ASP.NET Core

我了解到 ASP.NET Core/.NET Core:运行时和托管捆绑包(最新版本)依赖于 Microsoft Visual C++ 2015 可再发行。有问题的机器安装了 vc++ redist 的早期版本。安装上述版本的可再发行组件(32 位和 64 位)后,一切又开始工作了。

有趣的是 ASP.NET Core/.NET Core: Runtime & Hosting Bundle Version 2.2 安装程序在安装过程中没有抛出任何关于丢失的错误或警告vc++ 2015 重新发行.

我在 Windows 7 的新安装中遇到了同样的错误,我查了一下,发现它确实是缺少的更新。 要修复它,您只需从 https://www.microsoft.com/en-us/download/details.aspx?id=49077 下载并安装 KB2999226(即,这是针对 windows 7 的) & 问题直接解决了。你不需要去 & download/install 整个 Microsoft Visual C++ Redistributable 包。几分钟后都没有重新启动。您不需要安装 2015 和 2017 软件包,只需安装 2013、2010、2008 和 2005 就足够了。

我注意到 C:\Program Files\IIS\Asp.Net Core Module 在我的机器上确实不存在。我刚刚复制了确实存在的 C:\Program Files\IIS Express\Asp.Net Core Module(提升)并且...应用程序池开始正常!