【问题标题】:The Module "aspnetcorev2.dll" failed to load模块“aspnetcorev2.dll”加载失败
【发布时间】:2019-01-14 06:27:22
【问题描述】:

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

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

模块 DLL C:\Program Files (x86)\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll 加载失败。数据就是错误。

我尝试将池设置为 32/64 位,但错误是相同的。有没有其他人遇到过这个问题或有解决方案?

【问题讨论】:

标签: .net iis .net-core iis-7 iis-7.5


【解决方案1】:

阅读以下文件后-

Troubleshoot ASP.NET Core on IIS

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

我了解到 ASP.NET Core/.NET Core: Runtime & Hosting Bundle(最新版本)依赖于 Microsoft Visual C++ 2015 Redistributable。有问题的机器安装了早期版本的 vc++ redist。安装上述版本的可再发行组件(32 位和 64 位)后,一切都重新开始工作了。

有趣的是 ASP.NET Core/.NET Core: Runtime & Hosting Bundle Version 2.2 安装程序在安装过程中没有抛出任何关于缺少 vc++ 2015 redist。

【讨论】:

  • 安装 Microsoft Visual C++ 2015 Redistributable(32 位和 64 位)对我不起作用。我有你在原来的问题中所说的同样的问题。我尝试使用 dotnet-hosting-2.2.1、2.2.2 和 2.2.4 版本,但在事件查看器中遇到了 IIS 出现故障并显示相同错误消息的问题。
  • 我还尝试安装 Microsoft Visual C++ Redistributable 2017(32 位和 64 位)。同样的事情(IIS 对所有和任何请求都失败)
  • 它马上解决了我的问题。甚至我正常的非核心网站也会出错
  • 在全新安装 Windows Server 2012 R2 时遇到此问题,其中包含当前更新和安装的 .NET 4.7.2。 Visual C++ 2015 Redistributable x64 安装修复了它。 (如果应用程序的供应商将其包含在他们的前置要求中,那就太好了...>sigh
  • 我的问题是我安装的东西安装了 x86 版本,所以我都安装了。卸载x86版本重启后一切恢复正常。
【解决方案2】:

那个aspnetcorev2.dll其实就是ASP.NET Core 2.0 Module,俗称ANCM。如果 ASP.NET Core 2.0/2.1/2.2 将在 IIS 之上运行并使用 IIS 作为主要代理,然后再转到 ASP.NET Core 原始 Kestrel 引擎,则此模块需要一些设置和配置,并且它也被调用进程模型。

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

有关 IIS 上的 ANCM 的更多信息,请查阅此官方 Microsoft Docs: 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 运行时的正式发布版本,而不是每日构建,因为使用 .NET Core 2.0/2.1/2.2 的每日构建可能会带来一些奇怪的错误,因为它们的完整分布运行时 DLL 可能不完全一致。

有关在 ASP.NET Core 2.x 中对 ANCM 进行故障排除的更多信息,请参阅此官方 MS Docs: 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.jsonhttps://docs.microsoft.com/en-us/dotnet/core/tools/global-json

【讨论】:

  • 我在这台机器上安装了 2.1 版,它运行良好。但是安装 2.2 会出错。正如我所看到的,问题出在 IIS 中,因为在加载应用程序并且所有应用程序(包括较旧的 MVC 和 WebForms)都受到影响之前就发生了错误。卸载 2.2 版后,IIS 又开始工作了。
  • 然后你应该清除你机器上的所有 nuget 缓存,恢复并再次运行 MSBUILD。如果您使用 .NET Core 2.1 作为您的 ASP.NET Core 2.1 应用程序的平台,那么如果您安装 .NET Core 2.2而不将您的应用程序的引用更新到 v2.2,则有可能引用还是混在一起。
  • 我的应用程序以net471为目标。但正如我所说,安装 2.2 版会使 IIS 停止工作。即使是简单的静态文件主机也会停止工作。
  • @th1rdey3 如果您的应用程序以 net471 为目标,为什么要使用 .NET Core 2.1? ASP.NET Core 2.1 与 .NET4.7.1 不兼容。此外,您的问题没有提及有关使用 .NET 4.7.1 的任何信息,并且您的标签是 net-core。您最后的评论与您自己的问题相矛盾。
  • 我正在使用 .Net Core 托管包,这是在 IIS 中托管 dotnetcoremvc 应用程序所需的
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 2018-08-13
      • 2020-02-15
      • 1970-01-01
      • 2017-04-23
      相关资源
      最近更新 更多