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

HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure after upgrading to ASP.NET Core 2.2

将我的项目升级到 ASP.NET Core 2.2 后,我尝试 运行 应用程序(当然是在本地),浏览器显示了一条错误消息,如下面的屏幕截图所示。

visual studio 错误资源管理器不再通知错误。我不知道发生了什么。

我的解决方案:

  • 删除目录中的所有项目
  • 创建新项目
  • 复制所有文件,但 program.cs 和 startup.cs
  • 从启动和程序 类 手动复制到新的 startup.cs 和新的 program.cs

有效。

我 运行 进入这个问题并有不同的解决方案。对我来说,这是因为我有一个与应用程序过时的包(我已经在 NuGet 上更新了它,并且库没有在生产中被替换)。更新包为我修复了它。

请注意:我必须手动 运行 dotnet.exe 项目 dll 才能看到为我修复它的消息。

希望这对以后的其他人有所帮助。

在我的例子中,我将一些nuget包升级到net core 2.2,但是我没有安装net core 2.2 sdk,所以我去net core网站下载了最新的sdk或runtime包,然后我以管理员身份在 CMD 中执行 net stop was /y 然后执行 net start w3svc。问题帮我解决了。

我在尝试从 VS2017 发布到生产 Windows 2016 服务器后遇到了这个错误。 (它在我本地 Win10 PC 上的 IIS Express 中运行良好。)

我更新了包,所有版本匹配并在我的代码中更新,.net 核心版本匹配,重新启动 IIS,重新启动...不开心。

在发布 > 配置 > 设置(左侧选项卡)中,我必须将目标运行时从 "Portable" 设置为 "win-x64"(或与您的环境相关的任何内容)。我也选择 "Remove additional files at destination."

"Portable" 是默认设置。我不确定 "Portable" 运行时正常工作需要什么,但如果 "Portable" 运行时不是你需要的,可能会节省其他人一些时间。

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

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

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

IIS Manager > Application Pools > app pool name > (right click) Advanced Settings > Enable 32-Bit Applications = False

这个错误开始出现在我们的开发服务器上。我一直在使用这个发布命令创建一个 "self-contained" 文件夹用于部署。

dotnet publish -c release -r win7-x64 --output:bin/self_contained

我的解决方法是使用以下命令发布 "framework-dependent" 部署:

dotnet publish --output:bin/framework_dependent

开发服务器确实在此文件夹中安装了几个版本的 .NET Core(2.2.3 和 2.2.5)*C:\Program Files\dotnet\shared

我仍然不清楚为什么独立发布不起作用。您可能认为独立发布是更可靠的方法,但在我的情况下并非如此。

.NET Core blog post 很有帮助。

我今天 运行 通过我的托管解决了这个问题 - 在本地一切正常但是一旦我发布,我就收到这个错误。

我查看了这些包,发现一些 .net 核心内容已升级到 3.0 预览版。

然后我将 VS2019 中的构建选项从 "Framework-Dependent" 更改为 "Self-contained"。构建和发布花费了 5 倍的时间,但现在可以了。

现在我正在与主机技术支持核实可能存在的问题 - 正式他们只支持 2.1 / 2.2,所以这可能是来自 3.0 预览版的这些包,但目标版本是 2.2。

在我的例子中,是 appsettings.json 中的日志级别设置不正确。而不是 Warning 我有 Warn 并且这导致应用程序崩溃并出现上述错误。

我在 Windows 服务器上部署以 .Net 框架为目标的 .Net 核心应用程序时遇到了同样的错误。我检查了服务器上的事件查看器,发现服务器没有安装 .net 4.7.2。

安装它解决了我的问题。

我的问题是格式错误的 appsetttings.json 文件。我通过 web.config 启用了标准输出日志记录,并且能够得到引发此错误的底层异常。

另一种情况对我造成了这个问题:

我正在 运行使用服务帐户设置应用程序池身份,我不得不 运行 dotnet dev-certs https 在此用户下才能在启动期间摆脱 "System.InvalidOperationException: Unable to configure HTTPS endpoint."。

如果重置项目并手动复制程序和启动 类 对您有效,那么显然有些事情搞砸了。这有一些更大的潜在问题。使用 OutOfProcess 托管模型是可以的,但是对于 .Net Core 2.2,您应该能够使用 InProcess 托管模型,因为它自然更快:一切都在 IIS 中处理,IIS 和应用程序的 Kestrel 服务器之间没有额外的 HTTP 跃点.

如果您在 visual studio 解决方案资源管理器中右键单击您的项目文件,请确保 AspNetCoreModuleName 标记具有 AspNetCoreModuleV2 值(相对于旧的 AspNetCoreModule)。此外,检查 Windows 应用程序事件日志以确定潜在的罪魁祸首。尽管那里的错误消息有些含糊,但它们可能会向您指出导致失败的代码中的确切行号。

最后,如果您将 CI/CD 与 TFS 一起使用,appsettings.json 文件中可能存在未正确替换为实际值(URL 等)的环境变量。

项目发布时发生同样的失败。 该问题与最新的 Microsoft.AspNetCore.App 软件包有关。只需将它从 2.2.x 向下转换为 2.2.0 或转到 dotnet.microsoft.com/download/dotnet-core/2.2 并获取最新的 dotnet-hosting 安装程序

看来我遇到了同样的问题。发生这种情况是因为如果您在解决方案中没有 global.json 文件,那么 VS build(publish) .net 核心应用程序将安装在您的电脑上的最新版本。所以,我做下一个解决方案:

添加 .net 核心版本的 global.json 文件。

{
   "sdk": {
      "version": "2.2.402"
   }
}

来自docs.microsoft.com:

global.json can be placed anywhere in the file hierarchy. The CLI searches upward from the project directory for the first global.json it finds. You control which projects a given global.json applies to by its place in the file system. The .NET CLI searches for a global.json file iteratively navigating the path upward from the current working directory. The first global.json file found specifies the version used. If that version is installed, that version is used. If the SDK specified in the global.json is not found, the .NET CLI rolls forward to the latest SDK installed. Roll-forward is the same as the default behavior, when no global.json file is found.

https://docs.microsoft.com/en-us/dotnet/core/versions/selection

小心发布。

当我将它发布到我的 PreProd 环境时,这个 conf 运行良好: Portable

但是在我的 Prod 环境中,conf 不起作用。我必须选择指定的那个: win-x64

我不知道那是什么原因。如果有人知道,我将不胜感激!

当我尝试在生产环境中将 asp.net 核心 (out-of-process hosting model) 网站部署到 windows 服务器 2012r2 IIS 时出现问题。 我用这个解决方案解决了这个问题:

Change application pool identity to administrator.

当我使用 Entity Framework Coremigrations 部署代码时,这发生在我身上,状态之间存在不匹配数据库和代码中的迁移。

对我来说,问题是由 dotnet publish 创建 web.config 条目 stdoutLogFile=".\logs\stdout" 引起的。正确的值应该是 stdoutLogFile="\?\%home%\LogFiles\stdout".

MSDN 参考:https://blogs.msdn.microsoft.com/waws/2018/06/10/troubleshooting-http-502-5-startup-issues-in-azure-appservice-for-asp-net-core-websites/

这可能是 ASP.NET Core 2.2.0 运行时中的错误,可能已在更高版本中修复。

我也遇到了同样的问题。当我查看解决方案的输出 window 时。

然后我能够看到一个不同的错误,即“目标进程退出而没有引发 CoreCLR 启动事件”,为了解决这个问题我不得不删除 Microsoft.AspNetCore.All 从我的 Nuget 包中安装 Microsoft.AspNetCore.App。我还必须 here 安装正确的 .Net SDK。完成后,重新启动我的机器并打开解决方案,错误消失了。希望对你有帮助

你有 2 个解决方案(这个答案适用于 windows 服务器我对 linux 服务器一无所知)。

第一个:

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

  • 在您的项目文件夹中打开 cmd,然后 运行 这个命令: dotnet run 然后所有警告和错误都会显示给您(如果您有关于上述命令的错误无法识别下载点来自 this link)

  • 的网络核心 SDK

秒:

  • 您必须将 hostingModel 属性从 OutOfProcess 更改为 在 web.config 中进行,您可以将 stdoutLogEnabled 更改为 true 在日志文件夹中获取项目错误的值
  • 阅读您的项目错误并修复这些错误。

在我的例子中 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>

这是我第一次发布 Azure Web 应用程序时遇到的情况。这是我解决它的方法:

使用 Kudo/FTP 浏览网站。在根文件夹中有一个 LogFiles 文件夹,您可以在其中找到 eventlog.xml。在这个文件中,当 Entity Framework Core 尝试设置数据库时,我可以看到我的 Web 应用程序有一个 SqlException,这导致我检查数据库权限(这对我来说是个问题)。

如果您使用的是 ASP.Net 核心版本 2.2,那么在 appsettings.json 中只需注释行 -

"AllowedHosts": "*"

它解决了这个问题。我的应用程序工作正常。

发生此错误的原因有很多。在我的例子中,由于 appsettings.json 的格式无效,这是一个例外。我是如何发现的,方法是在 web.config.

中启用 stdout 登录

这对我有用: - I 运行部署的(IIS)文件夹中项目的启动文件。请注意:这不会解决问题,但会告知您问题所在。就我而言,问题的原因是数据库迁移失败

似乎每个人对此都有不同的答案。我也有这个问题。您可以判断出导致此问题的原因有很多。如果您发现这些解决方案中的任何一个都没有帮助,或者在尝试所有这些不同的解决方案时遇到问题,您可以尝试 运行 从发布文件夹的命令行中使用您的应用程序。

发布后,如果收到此错误,请转到发布文件夹,然后打开 command/terminal window,然后键入 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

解决错误后,再试一次,冲洗,重复。

对我来说,问题是缺少 appsettings.json

我根据环境变量 select 适当的 appsettings.json 文件(appsettings.production.json 或 appsettings.development.json)。事实证明,即使您不使用 appsettings.json 也是必需的。

我的问题是发布后的 web.config 文件。 aspNetCore 标记中的 processPath 缺少文件扩展名。在我的例子中是 .exe

在我的例子中,EF Migrations 抛出了异常,因为可能会丢失数据而阻止执行其中一个。 我不得不查看自定义应用程序日志(通常是日志文件夹)才能找出答案。

我猜题中提到的Error是app启动阶段的问题。事实上,迁移是 运行 在启动应用程序期间进行的,因此如果它们失败,应用程序将无法完成启动。

所以一般来说,当我们遇到这样的错误时,我们应该关注影响应用程序启动逻辑的事情。

对我来说是 web.config 文件,确保你有它并正确指定路径

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\bin\Debug\netcoreapp2.0\logs\stdout">

事件查看器也可用于检测应用启动错误。

按照以下步骤操作:

  • 在项目的根目录中创建一个目录:logs/stdout

  • 从项目的根目录打开 web.config 文件并找到这一行:

    <aspNetCore processPath=".\web.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
    
  • stdoutLogEnabled设为true并保存

  • 重新加载您的应用程序并查看目录中的日志:logs/stdout

当应用程序设置 json 中缺少项目启动期间所需的 api 端点等必需值时,也会出现此问题。 您可能正在对其进行参数化而不是为参数提供值。 我在 Azure devops

中得到了这个

我在Web.config中将stdoutLogEnabled设置为true。 所以在日志中我发现错误是BadImageFormatException。实际上我的 web 应用程序是用 32 位编译的,所以我必须在 Web.config:

中指定 dotnet 的 32 位版本
<aspNetCore processPath="C:\Program Files (x86)\dotnet\dotnet" arguments=".\MyApp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess" />

另一个答案可能会帮助处于相同情况的其他人:我们在 Azure 上有一个 AppService,其中有 3 个 NETCore 项目部署在 3 个不同的路径上:

  • 一个用于 Web (/webapi)
  • 一个用于移动 (/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 Startup Failure 消失了:)希望这个回答可以帮助其他人。

顺便说一句,我知道这个 post 与 NETCore2.2 有关,我们也遇到了同样的问题,但我们决定切换到 NETCore3.1,因为不再支持 NETCore2.2,而且这个版本也有问题关于其他几点。

我的 .NET Core 站点运行良好,但过了一会儿,我收到此错误(HTTP 错误 502.5 - ANCM Out-Of-Process 启动失败...) ; 我尝试了不同的方法。最后我在IIS中添加新网站(使用其他端口),然后错误就解决了。

我按照下面的步骤解决了。祝你好运:)

步骤 -1:转到解决方案资源管理器 < 右键单击​​ < 属性

第 2 步:

显示您的 .Net Core 框架或根据您的要求进行更改,但确保支持或需要更新的所有其他现有 DLL。

第 3 步: 在您的 PC 中下载 .NetCore 包
见下文 link https://dotnet.microsoft.com/download

甚至我也遇到过 post dotnet core 2.1 到 3.1 和 .netstandard 1.1 到 2.1 与 dotnet core 3.1 sdk 的问题。

当使用 dotnet publish -c Release 命令时,文件位于 bin\Release\netcoreapp3.1 之前是 bin\Release\netcoreapp2.1\publish 文件夹。

不确定确切的设置我们仍然有发布文件夹但是从发布文件夹的父目录部署成功了

我在 ASP.NET Core 2.2 项目中遇到了这个问题,并且通过 CleanRebuild 项目为我解决了这个问题。

对我来说,问题是关于从实体框架创建数据库,所以我转到我的 SQL 服务器、安全、登录,并为我的 IIS 应用程序池添加新的登录,并提供新的登录其服务器角色