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

k4ymrczo  于 2022-11-24  发布在  .NET
关注(0)|答案(3)|浏览(191)

我刚刚将我的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找不到. net。
我在网上搜索了一下,发现很多开发人员都遇到了同样的问题,看来微软真的没有抓住这一点,让在IIS下开发ASP.NET核心应用程序变得尽可能的痛苦。不管怎样,我想打破这堵在过去24小时里一直在撞头的砖墙,所以我需要一些帮助。
到目前为止,我尝试过的方法有:

  • 已安装最新版本的. NET核心运行时和托管捆绑包2.2.4版。
  • 已安装最新版本的. NET Core SDK 2.2.203版。
  • 确保可以从命令行运行"dotnet",并且在我的环境变量中,x64版本早于x86版本。

C:\WINDOWS\system32〉其中,C:\程序文件\dotnet\dotnet. exe C:\程序文件(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切换到运行时框架名称= Microsoft. AspNetCore. App。
  • 清理方案,以及手动删除bin、obj,什至. vs文件夹。

这些方法都没有帮助,我仍然得到相同的ANCM进程内处理程序加载失败错误。事件查看器显示了一个更有用的错误:
应用程序"C:\Housters\Web"无法启动。在"C:\Housters\Web\ %LAUNCHER_PATH %. exe"中未找到可执行文件
然而,我对此无能为力,因为我对Web.config的更改并不持久。但实际上,默认设置应该是现成的,我们不应该为了让IIS开发工作而跳过重重障碍。为什么ASP.NET核心项目默认情况下只生成一个. 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故障偏移:0x00000000003a388错误进程ID:0x2650故障应用程序启动时间:0x01d502b1f21b112e错误应用程序路径:错误模块路径:报告ID:5b5c14cb-8ffa-47b4 - 8cc1 - 42f951bc1256出现故障的软件包全名:错误的程序包相关应用程序ID:

6qqygrtg

6qqygrtg1#

出现此错误是因为您没有指定是要在进程中还是进程外承载网站...进程中可以通过使用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>
3pmvbmvn

3pmvbmvn2#

此错误的原因也可能是因为您的应用程序的global.json文件中的.NET SDK版本没有安装在您的本地计算机上。解决方法是检查global.json文件中配置的版本并将其安装在您的计算机上。我设法通过这种方法解决了此错误(01/06/2022)。
Windows事件视图中将出现以下错误:

rryofs0p

rryofs0p3#

我只是通过在web.config中将AspNetCoreModuleV2更改为AspNetCoreModule来解决此错误,但这不是完美的解决方案。
另一个解决方案是在发布应用程序时将其部署为自包含。

相关问题