【问题标题】:IIS: Handler "aspNetCore" has a bad module "AspNetCoreModuleV2" in its module listIIS:处理程序“aspNetCore”的模块列表中有一个错误模块“AspNetCoreModuleV2”
【发布时间】:2019-05-19 16:03:33
【问题描述】:

我使用 angular .net core 2.2 模板来构建应用程序。在 localhost 工作正常,当我托管到 IIS 时,我收到了这个错误。我正在使用 IIS 10 来托管应用程序。

错误,

HTTP 错误 500.21 - 内部服务器错误 处理程序“aspNetCore”的模块列表中有一个错误模块“AspNetCoreModuleV2”

【问题讨论】:

标签: c# asp.net-mvc iis .net-core


【解决方案1】:

Windows IIS

解决方案:安装the hosting bundle。

原因:虽然 SDK 通常包含运行时,但是,SDK 安装程序似乎没有在服务器上正确注册运行时。

解决方法(不推荐):

在 web.config 中将 AspNetCoreModuleV2 更改为 AspNetCoreModule。

Azure 平台托管

通过选择Extensions然后安装.NET Core Runtime来安装.NET Core运行时扩展。

【讨论】:

  • 安装托管捆绑包不起作用。我使用了解决方法,然后在发布时我必须将“V2”添加到 AspNetCoreModule。我正在使用 VS 2017 附带的 IIS Express。
  • 相同:安装托管捆绑包后,我们仍然必须使用解决方法。为什么“不推荐”解决方法?会导致什么问题?
  • 您需要安装与您的项目 .net 版本兼容的托管包。 dotnet.microsoft.com/download/dotnet-core/3.1
  • 对我来说,我从这里 docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis 安装了 dotnet-hosting-5.0.0-win.exe 并且无法在 Windwos 10 上的 IIS10 中启动默认 mvc 站点。但我安装了托管包在这个答案的链接(显然是 dotnet-hosting-2.2.1-win.exe)中,网站运行,tickety-boo。
  • 现在,我想知道为什么 2.2 可以工作,但 5.0 不行。在 IIS 的模块中,我看到 AspNetCoreModule 的路径指向 %systemroot\system32\...%,而 AspNetCoreModule 的路径指向 %ProgramFiles%\...,其文件夹可能不在 PATH 上 - 事实上,该模块是唯一的没有PATH 去system32。该 V2 模块是 5.0。
【解决方案2】:

在主机上安装 .Net Core 2.2 运行时包。

或者

将您的项目发布为独立的。

【讨论】:

  • 安装 SDK 是不够的。您必须选择运行时的“托管包”版本。即使没有 IISReset,这对我也有用。
  • 我已经安装了 2.2 托管包,但仍然有这个问题
  • @BinaryPatrick 你有没有解决你的问题?即使在安装了托管包之后,我也遇到了同样的错误。
  • 是的,我刚刚发布了我的解决方案
  • 自包含发布仍需要安装 AspNetCoreModuleV2
【解决方案3】:

通过从 modules="AspNetCoreModuleV2" 中删除 V2 对我有用。请注意,我的问题与从 Visual Studio 运行 .net 核心 Web api 有关。 IE Express 失败并显示代码 500,在调查描述“处理程序 'aspNetCore' 有一个错误模块..”的错误日志后,通过替换为以下内容解决了。

<handlers>
  <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>

【讨论】:

  • 虽然这可行,但从 V2 降级会有什么后果?
  • @BinaryPatrick 你确定删除 v2 是在降级它,而不是告诉它使用最新版本或它可以找到的任何版本,而不是强迫它寻找 v2?
  • 我不确定。不过我很想知道答案。
【解决方案4】:

更新

这是一种让您的应用保持在 v2 之前的托管状态的解决方法。请参阅 alan 的答案和我的评论以获得更完整的解决方案

原创

我通过将以下代码块添加到 Web 应用程序的 .csproj 来实现此功能。

<PropertyGroup>
  <TargetFramework>netcoreapp2.2</TargetFramework>
  <LangVersion>latest</LangVersion>
  <AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>
  <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>

显然,随着您的前进,您会想要更新netcoreapp 版本。这就是我能够让事情正常进行的方式。我不知道为什么仅仅安装 2.2 的托管包是不够的。

【讨论】:

  • 在安装 SDK、运行时托管包并如上修改我的项目文件后,问题解决了。
  • 将此解决方案与以下解决方案混合解决了我的问题:
【解决方案5】:

有几种方法可以解决这个问题:

  1. 安装最新的 .NET Core Runtime
  2. 检查 IIS 使用的 applicationhost.config 文件。您应该在相应的位置有以下条目:
<configuration>
    <system.webServer>
        ...
        <globalModules>
            ...
            <add name="AspNetCoreModuleV2" image="%IIS_BIN%\Asp.Net Core Module\V2\aspnetcorev2.dll" />
        </globalModules>
    </system.webServer>
    ...
    <location path="" overrideMode="Allow">
        <system.webServer>
            <modules>
                ...
                <add name="AspNetCoreModuleV2" lockItem="true" />
            </modules>
        </system.webServer>
    </location>
</configuration>

只需确保您的 IIS bin 目录中确实有 aspnetcorev2.dll 的文件。

【讨论】:

  • 这对我有用,但是,我在负载均衡器后面有一个带有 IIS 的机器集群,当我恢复共享配置时,它覆盖了我的更改。确保您在共享的 applicationhost.config 中验证这一点,或者在安装运行时后再次导出配置。
【解决方案6】:

我发布我的答案是为了节省其他人遇到相同问题的时间,这需要大约 1 小时。我的问题是我安装了不正确的托管 budle。如果您的应用程序使用 .Net Core 3.1,您必须下载它,而不是使用链接“x64”,而是使用下一页上的链接“Hosting bundle”:https://dotnet.microsoft.com/download/dotnet-core/3.1

我的问题是我认为 x64 托管包位于链接“x64”中,但事实并非如此。 “x64”链接不包含托管捆绑包,无法解决问题。 应使用仅链接“Hosting Bundle”下载托管捆绑包:

以下文章对我理解这个问题很有帮助:https://dotnetcoretutorials.com/2019/12/23/hosting-an-asp-net-core-web-application-in-iis/

【讨论】:

  • 哦,这真是令人困惑,感谢您的注意,安装捆绑包后我们需要做的其他任何事情,我们可以直接发布我们的应用程序吗?我们需要修改托管空间中的 .config 吗?
【解决方案7】:

在尝试访问 Windows 服务器上新部署的 Web 应用程序时,我也有同样的担忧。

它抛出了以下错误:

我是这样解决的:

首先,我使用此链接安装了最新版本的 .Net Core SDK:https://dotnet.microsoft.com/download/dotnet/3.1。在撰写本文时,最新版本是 3.1.14,使用 Windows x64 安装程序(因为我的 Windows 服务器是 x64),其中包括:

• .NET Core SDK 3.1.408
• .NET Core Runtime 3.1.14
• ASP.NET Core Runtime 3.1.14
• .NET Core Windows Desktop Runtime 3.1.14

接下来,我使用此链接https://dotnet.microsoft.com/permalink/dotnetcore-current-windows-runtime-bundle-installer 安装了 .NET Core Hosting 包,它是以下设备的安装程序:

• .NET Core Runtime
• ASP.NET Core Module

该捆绑包允许 ASP.NET Core 应用与 IIS 一起运行。

这是网页截图,您可以在其中下载 .Net Core SDK 和 .NET Core Hosting bundle

这是下载的 .Net Core SDK 和 .NET Core Hosting bundle 文件及其实际文件名在 Windows PC 的下载目录中的屏幕截图。

安装 Hosting Bundle 后,可能需要手动重新启动 IIS。例如,用于运行 IIS 工作进程的 PATH 上可能不存在 dotnet CLI 工具(命令)。

要手动停止和启动 IIS,请在提升的命令外壳(以管理员身份运行)中执行以下命令:

net stop was /y
net start w3svc

这一次,当我尝试访问网络应用时,它运行良好。

资源:

The .NET Core Hosting Bundle

就是这样。

我希望这会有所帮助

【讨论】:

    【解决方案8】:

    这对我有用:

    1. 检查您的 applicationhost.config 文件并确保您的 globalModules 部分中有以下条目。

    &lt;add name="AspNetCoreModuleV2" image="%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll" /&gt;
    1. 打开 IIS 管理器,转到模块。如果 AspNetCoreModuleV2 未列出,请点击“Configure Native Modules...”并选择“AspNetCoreModuleV2”并点击 OK 启用它。

    【讨论】:

    • 我从这个答案中得到了解决方案,我有 V2 的条目。我刚刚将我的 web.config 更改为使用 V2 并且它工作正常。
    【解决方案9】:

    我有 .net core 2.1,使用 Visual Studio 2019 (Windows 10) 的 webAPI。已安装的托管包 (3.1.3)。我尝试使用发布选项部署到文件夹。文件已生成。我按照快速步骤在 IIS 中创建网站。但是我开始收到 HTTP 错误 500.21。最后从部署文件夹打开 web.config 文件并执行相反的操作 - 将 AspNetCoreModule 更改为 AspNetCoreModuleV2。现在一切都好。感谢所有建议。

    【讨论】:

    • 我解决了这个问题。托管包的顺序安装非常重要。如果你先安装3.1不能安装2.1,那么解决方法是卸载3.1,重启,安装2.1再安装3.1
    【解决方案10】:

    我一秒钟前遇到了这个问题。我用这个替换了 web.config 中的代码部分。

    旧零件:

    <handlers>
            <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" 
            resourceType="Unspecified" />
    </handlers>
    

    新部分:

    <handlers>
            <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" 
            resourceType="Unspecified" />
    </handlers>
    

    【讨论】:

      【解决方案11】:

      当托管出现此问题时,最好的解决方案是在 project.csproj 文件中覆盖此值以获取发布版本。 请注意,在新版本的 Visual Studio 调试器中使用旧版模块时不起作用。 所以最好的解决方案就是这个。

          <TargetFramework>netcoreapp3.1</TargetFramework>
          <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
          <AspNetCoreModuleName Condition="'$(Configuration)' == 'Release'">AspNetCoreModule</AspNetCoreModuleName>
      

      【讨论】:

        【解决方案12】:

        我遇到了同样的问题,对我有用的是修复主机包的安装(控制面板 -> 程序和功能;右键单击主机包安装并单击“卸载”,然后选择“修复”在以下弹出的窗口之一中。

        【讨论】:

        • 如果应用需要怎么办?
        • 这不是卸载捆绑包,而是修复它。请再读一遍。
        • 现在,我可以看到了,
        • 好的,没问题。
        【解决方案13】:

        ASP.NET Core 2.2 或更高版本:对于使用进程内托管模型的 64 位 (x64) 独立部署,请禁用 32 位 (x86) 进程的应用程序池。

        在 IIS 管理器 > 应用程序池的操作侧边栏中,选择设置应用程序池默认值或高级设置。找到启用 32 位应用程序并将值设置为 False。

        https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-3.0#create-the-iis-site

        【讨论】:

          【解决方案14】:

          在尝试访问 Windows 10 上新部署的 Web 应用程序时,我也有同样的担忧。

          它抛出了以下错误:

          HTTP 错误 500.21 - 内部服务器错误 处理程序“aspNetCore”的模块列表中有一个错误模块“AspNetCoreModuleV2”

          我是这样解决的:

          我使用此链接 https://dotnet.microsoft.com/permalink/dotnetcore-current-windows-runtime-bundle-installer 安装了 .NET Core Hosting 捆绑包,该链接是:

          • .NET Core 运行时 • ASP.NET Core 模块

          该捆绑包允许 ASP.NET Core 应用与 IIS 一起运行。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-04-13
            • 1970-01-01
            • 1970-01-01
            • 2013-07-02
            • 1970-01-01
            • 1970-01-01
            • 2011-09-06
            • 1970-01-01
            相关资源
            最近更新 更多