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

Posted

技术标签:

【中文标题】ASP.NET Core 无法在 IIS 下运行:HTTP 错误 500.0 - ANCM 进程内处理程序加载失败【英文标题】:ASP.NET Core fails to run under IIS: HTTP Error 500.0 - ANCM In-Process Handler Load Failure 【发布时间】:2019-09-22 23:02:50 【问题描述】:

我刚刚将我的 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 小时一直撞在头上的这堵砖墙,所以需要一些帮助。

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

安装了最新版本的 .NET Core Runtime and Hosting Bundle,版本 2.2.4。

安装了最新版本的 .NET Core SDK,版本 2.2.203。

确保“dotnet”可以从命令行运行,并且 x64 版本在我的环境变量中的 x86 版本之前。

C:\WINDOWS\system32>在哪里 dotnet C:\Program Files\dotnet\dotnet.exe C:\Program Files (x86)\dotnet\dotnet.exe

尝试将自动生成的 Web.config 从 aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" 更改为 aspNetCore processPath="dotnet" arguments="./Housters.Web.dll"更改不会持续,每次我构建我的 Web 应用程序时,Web.config 都会恢复到原来的 %LAUNCHER_PATH% 值。

尝试在 Web.config 中将“AspNetCoreModuleV2”更改为“AspNetCoreModule”。

在我的 Web.csproj 文件中添加了 IsTransformWebConfigDisabled=true 以防止我的自定义 Web.config 被覆盖。它不起作用,Web.config 仍然被覆盖。

尝试在我的 Web.csproj 文件中将 AspNetCoreHostingModel=InProcess 切换为 RuntimeFrameworkName=Microsoft.AspNetCore.App。

清理解决方案,以及手动删除 bin、obj 甚至 .vs 文件夹。

这些方法都没有帮助,我仍然得到相同的 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/调试”?

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

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

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

【问题讨论】:

每个 AppPool 有多少个网站? ...请注意,运行“进程内”时只能有一个。 @LGSon 我有一个单独的应用程序池用于这个网站,没有其他人使用它。 您发布的内容太少,其他人无法了解您的环境。请运行报告并编辑您的问题以包含它,docs.jexusmanager.com/tutorials/ancm-diagnostics.html Using .netcore 2.2 and using the `In Process` Hosting Model的可能重复 【参考方案1】:

您收到此错误是因为您没有指定是否要在进程中或进程外托管网站...可以使用 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>

【讨论】:

你不只是喜欢在没有评论的情况下被标记下来......尤其是当我真的遇到这个错误并用我指定的解决方案解决它时

以上是关于ASP.NET Core 无法在 IIS 下运行:HTTP 错误 500.0 - ANCM 进程内处理程序加载失败的主要内容,如果未能解决你的问题,请参考以下文章

无法在 IIS Express 中运行 ASP.NET Core Web API 项目

asp.net怎么配置IIS6

无法在 ASP.NET Core 5.0 下的 IIS 中托管 CoreWcf

调试在 IIS 中运行的 ASP.NET Core 应用程序

小5聊Asp.Net Core基础之发布不成功或者覆盖IIS上的DLL提示程序正在打开

如何用IIS运行ASP.net论坛