【问题标题】:ASP.NET Core fails to run under IIS: HTTP Error 500.0 - ANCM In-Process Handler Load FailureASP.NET Core 无法在 IIS 下运行:HTTP 错误 500.0 - ANCM 进程内处理程序加载失败
【发布时间】: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:

【问题讨论】:

标签: iis asp.net-core .net-core


【解决方案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>

【讨论】:

  • 你不只是喜欢在没有评论的情况下被标记下来......尤其是当我真的遇到这个错误并用我指定的解决方案解决它时
猜你喜欢
  • 1970-01-01
  • 2021-08-15
  • 2020-01-06
  • 2020-08-24
  • 1970-01-01
  • 2019-09-07
  • 2020-08-23
  • 2020-09-12
相关资源
最近更新 更多