【问题标题】: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 上 - 事实上,该模块是唯一的没有PATHsystem32。该 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 SDKhttps://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
            相关资源
            最近更新 更多