HTTP错误502.5 - 升级到ASP.NET Core 2.2后,ANCM外部进程启动失败

104

将我的项目升级到ASP.NET Core 2.2之后,我尝试运行应用程序(当然是本地运行),但浏览器显示了以下截图中的错误消息。

在这里输入图片描述

Visual Studio错误资源管理器没有更多错误通知。 我不知道发生了什么。


2
@LexLi 这个问题影响了本地,而不是服务器。我已经安装了dotnet-sdk-2.2.104和aspnetcore-runtime-2.2.2。 - TheBatman94
6
不需要。您需要从此处 https://dotnet.microsoft.com/download/dotnet-core/2.2 下载最新的“运行时和托管捆绑包”。 - Lex Li
@LexLi 谢谢你的回答。 - TheBatman94
@LexLi 您的建议对我很有帮助。谢谢。 - Abdul Haseeb
如果您更新了依赖的引用库,并且只将主项目的dll文件复制到IIS托管目录中,那么就会出现这种问题。为了保险起见,请将整个项目发布文件夹复制到wwwroot目录中。 - undefined
显示剩余3条评论
39个回答

43

我的情况是,我将一些nuget软件包升级到了net core 2.2版本,但是我没有安装net core 2.2的sdk,所以我去了net core网站下载了最新的sdk或运行时包,并在管理员CMD中执行了net stop was /ynet start w3svc命令。问题已经解决。


5
这对我有效。虽然在服务器上只需要运行时。 - Pierluc SS
非常好的答案。完美地解决了问题,但我已经更新到正在实现的项目所使用的确切版本(不是最新版本)。应该标记为正确答案。 - Youkko
从微软网站下载了正确的 SDK,问题得到解决。谢谢! - tshoemake

19

在尝试从VS2017发布到生产Windows 2016服务器后,我遇到了此错误。(在我的本地Win10 PC上的IIS Express中正常工作。)

我更新了包,所有版本都匹配并在我的代码中得到更新,.NET Core版本也匹配,重新启动IIS,重启……但仍然不行。

在发布> 配置> 设置(左侧选项卡)中,我必须将目标运行时从“Portable”设置为“win-x64” (或者与您的环境相关的任何内容)。 我还选择“在目标位置删除其他文件。”

“Portable”是默认设置。 我不确定“Portable”运行时需要什么才能正常工作,但如果您不需要“Portable”运行时,则可以节省其他人的时间。

enter image description here

一般来说,如果我的环境中有不匹配的东西,我会遇到这个错误。例如,有一次我将我的一个项目从2.2升级到.Net Core 3.1,但是没有在服务器上安装ASP.NET Core Runtime Hosting Bundle:

https://dotnet.microsoft.com/download/dotnet-core/3.1

此外,如果你的应用程序池设置为启用32位应用程序,则可能会出现此错误。尝试:

IIS管理器 > 应用程序池 > 应用程序池名称 > (右键单击)高级设置 > 启用32位应用程序 = 假


1
非常完美 :) 非常感谢,我不得不再次发布我的应用程序。 - Fabio Silva Lima
真烦人,我不得不对我的.NET Core 3.1在Windows 2016服务器上的win-x64进行更改。 - Vaclav Elias
这似乎是我的全部了。由于我使用的是Rider,而且出于某种原因它只会拒绝发布Portable以外的任何东西,所以这也变得更加棘手了。但显然在发布ASP Core时Portable不起作用...我不得不使用VS发布到一个临时文件夹,然后手动将文件复制到Web文件夹中。 - Dave Cousineau

18

我遇到了这个问题,并找到了一个不同的解决方案。对于我来说,问题出在一个包与应用程序不兼容(我已经在NuGet上更新了它,但是库在生产环境中没有被替换)。更新这个包对我起了作用。

需要注意的是:我必须手动运行dotnet.exe并使用项目dll才能看到为我解决问题的消息。

希望这能帮助后来遇到类似问题的人。


29
运行 $ dotnet ./project.dll 确实揭示了实际问题,修复该问题显然起作用了。 - Bob Meijwaard
运行该命令提供了更多信息。我必须安装最新的 SDK。 - Charanraj Golla
2
这是帮助我的方法。我运行了 $ dotnet ./project.dll,然后按照建议转到 localhost:5000。在这里,我看到了导致我找到解决方案的错误日志。对我来说,问题出在 appsettings.Development.json 的语法错误上。真是匪夷所思。 - Rial Johnson
2
运行 dotnet ./project dl 成功!但是 IIS 无法运行它 :( - anon

13

你有两个解决方案(此答案适用于Windows服务器,我不知道Linux服务器)。

第一个方案:

  • 将项目的所有文件夹(除了bin和obj文件夹)复制到服务器上。

  • 在项目文件夹中打开cmd,然后运行此命令:dotnet run ,然后会显示所有警告和错误信息(如果你遇到关于以上命令无法识别的错误,请从此链接下载dot net core sdk)。

第二个方案:

  • 你必须将web.config中的hostingModel属性从OutOfProcess更改为inprocess,并将stdoutLogEnabled更改为true值,以便在logs文件夹中获取项目错误。
  • 阅读项目的错误并修复它们。

在我的情况下,web.config如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\BMS.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess" />
    </system.webServer>
  </location>
</configuration>

我会将其更改为:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\BMS.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

8
在我的情况下,问题是在appsettings.json中设置的日志级别错误。我把Warning写成了Warn,这导致应用程序崩溃并出现以上错误。

2
是的,我也一样,我试图找到问题,然后发现逗号丢失了 :( - Kadir

7

似乎每个人都有不同的答案。我也遇到了这个问题。您可以看到,有很多不同的原因导致了这个问题。如果您找不到任何这些解决方案有用或者试图通过所有这些不同的解决方案时出现问题,您可以尝试从发布文件夹中的命令行运行应用程序。

发布后,如果您收到此错误,请转到您的发布文件夹,然后打开一个命令/终端窗口,接着输入dotnet .\YourStartupProject.dll,您应该会收到一个异常错误,这将使解决问题更加容易。

例如,这是我在没有设置SQL服务器的新环境上尝试时收到的错误,并且当然会收到此错误。

Application startup exception: System.Exception: Could not resolve a service of type 
'YourStartupProject.DataServices.DbContext.DbContext' for the parameter 
'context' of method 'Configure' on type 'YourStartupProject.Startup'. ---> 
System.ArgumentNullException: Value cannot be null.
Parameter name: connectionString

一旦您解决了错误,请再次尝试,反复多次。


3
另一个答案可能对处于相同情况的其他人有所帮助:我们在Azure上有一个AppService,在那里部署了3个不同路径的NETCore项目:
  • Web(/webapi)
  • Mobile(/mobileapi)
  • Functions serverless,我们的情况是AzureFunctions(/functionapi)
自从升级到NETCore3.x以来,我们了解到默认的托管模型是"In-Process",因此我们必须编辑.csproj文件将托管模型明确设置为"Out-Of-Process",如下所示:
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
  </PropertyGroup>

但这还不够:事实上,我们还需要编辑 Program.cs。为什么?因为在 Program.cs 中,NETCore3.x 默认生成了以下代码:
    public static IHostBuilder CreateHostBuilder(string[] args)
    {
        return Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
                webBuilder.ConfigureKestrel(o => o.AddServerHeader = false);
            });
    }

当我们将下面的旧代码替换为NETCore2.x版本时:
    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        return WebHost.CreateDefaultBuilder(args)
            .UseKestrel(options => options.AddServerHeader = false)
            .UseStartup<Startup>();
    }

部署后,错误502.5 ANCM启动失败消失了 :) 希望这个答案可以帮助其他人。

顺便说一下,我知道这篇文章与NETCore2.2有关,我们也遇到了同样的问题,但我们决定切换到NETCore3.1,因为NETCore2.2不再受支持,并且在其他一些方面也存在缺陷。


2

1
我��遇到了类似的问题,但在我的代码库中,“stdoutLogFile”已经设置为简单的相对路径“.\stdout”。这破坏了Azure中的应用程序,但很难捕捉。有时可以工作,有时会崩溃并给出各种.NET库的随机FileNotFound错误。在我的项目中将“stdoutLogFile”更改回“\?%home%\LogFiles\stdout”,现在完美运行。他们那边需要加强一些错误处理! - evilkos

2
请按照以下步骤操作:
  • create a directory in root of your project : logs/stdout

  • open the web.config file from root of your project and find this line:

    <aspNetCore processPath=".\web.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
    
  • set stdoutLogEnabled as true and save it

  • reload your app and see the logs in the directory : logs/stdout


1
这是对我有用的方法: - 我在已部署(IIS)文件夹中运行了项目的启动文件。请注意:这并不能解决问题,但会告诉您问题出在哪里。在我的情况下,问题的原因是数据库迁移失败。

你好,欢迎来到 Stack Overflow。感谢您分享了一种诊断和解决类似问题的方法 :) - William Patton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接