首页 > 解决方案 > ASP.NET Core 无法在 IIS 下运行:HTTP 错误 500.0 - ANCM 进程内处理程序加载失败

问题描述

我刚刚将我的 Web 应用程序从 ASP.NET (Framework) MVC 升级到了 ASP.NET Core 2.2。该应用程序在 IIS Express 下运行良好,但是一旦我尝试在 IIS 下运行它,它就会给出一般错误:

HTTP 错误 500.0 - ANCM 进程内处理程序加载失败 此问题的常见原因:未找到 Microsoft.NetCore.App 或 Microsoft.AspNetCore.App 的指定版本。进程中的请求处理程序 Microsoft.AspNetCore.Server.IIS 未在应用程序中引用。ANCM 找不到 dotnet。

我在网上搜索过,发现很多开发人员都遇到了同样的问题,看来微软真的错过了这一点,并且尽可能地让在 IIS 下开发 ASP.NET Core 应用程序变得痛苦。无论如何,我想打破过去 24 小时一直撞到头的这堵砖墙,所以需要一些帮助。

到目前为止我尝试过的事情:

C:\WINDOWS\system32>其中 dotnet C:\Program Files\dotnet\dotnet.exe C:\Program Files (x86)\dotnet\dotnet.exe

这些方法都没有帮助,我仍然得到相同的 ANCM In-Process Handler Load Failure 错误。事件查看器确实显示了一个更有用的错误:

应用程序 'C:\Housters\Web\' 无法启动。在“C:\Housters\Web\%LAUNCHER_PATH%.exe”中找不到可执行文件

但是,我对此无能为力,因为我的 Web.config 更改不会持续存在。但实际上,默认设置应该是开箱即用的,我们不应该为了让 IIS 开发工作而费尽心思。为什么 ASP.NET Core 项目默认只生成 .dll 时要查找 .exe?为什么不将 %LAUNCHER_PATH% 替换为正确的路径,例如“bin/Debug”?

编辑:我还应该提到,有时我能够让我的自定义 Web.config 持久化,当我这样做时,每次尝试运行 Web 应用程序时,我都会得到一个 JIT 调试器提示:

在此处输入图像描述

选择调试或查看事件日志只会给我一个非常不友好的错误消息:

错误应用程序名称:w3wp.exe,版本:10.0.17134.1,时间戳:0xed729d4e 错误模块名称:KERNELBASE.dll,版本:10.0.17134.556,时间戳:0xb9f4a0f1 异常代码:0xc0020001 错误偏移:0x000000000003a3850 错误进程应用程序启动时间:0x01d502b1f21b112e 错误应用程序路径:c:\windows\system32\inetsrv\w3wp.exe 错误模块路径:C:\WINDOWS\System32\KERNELBASE.dll 报告 ID:5b5c14cb-8ffa-47b4-8cc1-42f951bc1256 错误包已满名称:错误包相关的应用程序 ID:

标签: iisasp.net-core.net-core

解决方案


您收到此错误是因为您没有指定是否要在进程中或进程外托管网站...可以使用 UseIIS() 指定进程中。

尝试将 Program.cs 中的 CreateWebHostBuilder 方法更改为:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) 
{
    var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
    var builder = WebHost.CreateDefaultBuilder(args);

    if (env == EnvironmentName.Staging || env == EnvironmentName.Production)
        builder.UseIIS();

    builder.UseStartup<Startup>();
    return builder;
}

我通过添加以下内容在我的 .pubxml 部署配置文件中设置 ASPNETCORE_ENVIRONMENT:

  <PropertyGroup>
    <EnvironmentName>Staging</EnvironmentName>
  </PropertyGroup>

推荐阅读