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

时间:2019-02-18 21:22:22

标签: c# asp.net-core-2.2

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

enter image description here

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

36 个答案:

答案 0 :(得分:2)

我遇到了这个问题,并提出了不同的解决方案。对我来说,我有一个与该应用程序已过期的软件包(我已经在NuGet上对其进行了更新,并且该库尚未在生产中被替换)。更新程序包已为我修复。

注意:我必须手动使用项目dll运行dotnet.exe,以便查看为我修复的消息。

希望这可以帮助其他人。

答案 1 :(得分:2)

在我的情况下,我将一些nuget软件包升级到了net core 2.2,但是我没有安装net core 2.2 sdk,因此我去了net core网站下载了最新的sdk,然后我做了一个“ net stop”是/ y”,然后以管理员身份在CMD中输入“ net start w3svc”。问题为我解决了。

答案 2 :(得分:1)

这是我第一次发布Azure Web App时发生的事情。这是我的解决方法:

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

答案 3 :(得分:1)

似乎每个人对此都有不同的答案。我也有这个问题。您可以说有很多不同的原因导致此问题。如果您发现这些解决方案均无用,或者遇到尝试使用所有这些不同解决方案的问题,则可以尝试从发布文件夹的命令行运行应用程序。

发布后,如果收到此错误,请转至发布文件夹,然后打开命令/终端窗口,键入dotnet .\YourStartupProject.dll后,您将收到异常错误,这将使解决此问题更加容易

例如,这是我在不设置SQL Server的情况下尝试新环境时收到的错误,当然会收到此错误。

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

解决错误后,请重试,冲洗,然后重复。

答案 4 :(得分:1)

请按照以下步骤操作:

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

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

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

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

答案 5 :(得分:1)

如果重置项目并手动复制Program和Startup类对您有用,那么显然有些混乱。这有一些更大的潜在问题。可以使用OutOfProcess托管模型,但是使用.Net Core 2.2,您应该可以使用InProcess托管模型,因为它自然更快:在IIS中处理所有内容,而IIS和应用程序的Kestrel服务器之间无需进行额外的HTTP跳转。

如果在Visual Studio解决方案资源管理器中右键单击项目文件,请确保AspNetCoreModuleName标记具有AspNetCoreModuleV2值(而不是较早的AspNetCoreModule)。另外,检查Windows应用程序事件日志以识别潜在的罪魁祸首。即使错误消息有些含糊不清,但它们仍可能将您指向导致失败的代码中的确切行号。

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

答案 6 :(得分:0)

我的.NET Core站点工作正常,但过了一会儿,我收到了此错误( HTTP错误502.5-ANCM进程外启动失败... ); 我尝试了不同的方法。最后,我在IIS中添加新网站(使用其他端口),然后解决了该错误。

答案 7 :(得分:0)

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

  • 一个用于Web(/ webapi)
  • 一个用于移动(/ mobileapi)
  • 一个用于无服务器的函数,在我们的例子中是AzureFunctions(/ functionapi)

自升级到 NETCore3.x 以来,我们了解到托管模型默认为“处理中”,因此我们必须编辑.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,并且该版本在其他方面也存在问题。 / p>

答案 8 :(得分:0)

我在Web.config中将stdoutLogEnabled设置为true。 因此,在日志中,我发现错误为BadImageFormatException。实际上我的Web应用程序是用32位编译的,因此我必须在Web.config中指定32位版本的dotnet:

<aspNetCore processPath="C:\Program Files (x86)\dotnet\dotnet" arguments=".\MyApp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess" />

答案 9 :(得分:0)

当在应用程序设置json中缺少项目启动期间所需的必需值(例如api端点)时,也会出现此问题。 您可能对其进行了参数化,但未提供参数值。 我在Azure devops中得到了这个

答案 10 :(得分:0)

我按照以下步骤进行了解决。祝你好运:)

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

第2步:

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

第3步: 在您的PC中下载.NetCore软件包
见下面的链接 https://dotnet.microsoft.com/download

答案 11 :(得分:0)

甚至我也遇到过使用dotnet core 3.1 sdk将dotnet core 2.1转换为3.1和.netstandard 1.1 to 2.1的问题。

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

不确定确切的设置,我们仍然拥有publish文件夹,但是从publish文件夹的父目录进行部署就可以了

答案 12 :(得分:0)

对我来说,这是web.config文件,请确保已安装并正确指定路径

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

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

答案 13 :(得分:0)

在我的案例中,由于潜在的数据丢失,EF迁移引发了有关阻止执行其中之一的异常。 我必须查看自定义应用程序日志(通常是Log文件夹)才能找到答案。

我想问题中提到的错误是由于应用启动阶段的问题引起的。确实,迁移是在启动应用程序时运行的,因此,如果迁移失败,则该应用程序将无法完成启动。

因此,一般来说,当我们遇到此类错误时,我们应该专注于影响应用启动逻辑的事情。

答案 14 :(得分:0)

我的问题是发布后的web.config文件。 aspNetCore标记中的processPath缺少文件扩展名。就我而言,它是.exe

答案 15 :(得分:0)

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

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

答案 16 :(得分:0)

我的解决方案:

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

工作。

答案 17 :(得分:0)

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

答案 18 :(得分:0)

由于许多原因,可能会发生此错误。就我而言,这是一个例外,因为appsettings.json的格式无效。我发现是通过在web.config中启用stdout登录。

答案 19 :(得分:0)

我在ASP.NET Core 2.2项目中遇到了这个问题,并通过清理重建项目为我解决了该问题。

enter image description here

答案 20 :(得分:0)

如果您正在使用ASP.Net Core 2.2版,则在appsettings.json中只需注释以下行-

“ AllowedHosts”:“ *”

它解决了问题。我的应用程序运行正常。

答案 21 :(得分:0)

您有2种解决方案(此答案适用于Windows服务器,而我对Linux服务器一无所知)。

第一:

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

  • 在您的项目文件夹中打开cmd,然后运行以下命令:dotnet run,然后向您显示所有警告和错误(如果您对上述命令有错误,则无法识别来自{{3}的下载点网核心sdk })

秒:

  • 您必须将hostingModel属性从OutOfProcess更改为 web.config中的inprocess,您可以将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>

答案 22 :(得分:0)

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

enter image description here

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

答案 23 :(得分:0)

对我来说,此问题是由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运行时中的错误,可能已在更高版本中修复。

答案 24 :(得分:0)

当我使用 Entity Framework Core migrations 部署代码时,这发生在我身上,并且数据库状态和代码中的迁移之间不匹配。< / p>

答案 25 :(得分:0)

当我尝试将asp.net核心(out-of-process hosting model)网站部署到生产环境中的Windows Server 2012r2 IIS时,会出现问题。 我通过以下解决方案对此进行了修复:

Change application pool identity to administrator

答案 26 :(得分:0)

请谨慎发布。

当我将其发布到PreProd环境时,此conf可以正常工作: Portable

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

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

答案 27 :(得分:0)

好像我遇到了同样的问题。发生这种情况的原因是,如果解决方案中没有global.json文件,则VS将使用您的PC上安装的最新版本来构建(发布).net核心应用程序。所以,我做下一个解决方案:

添加一个具有.net核心版本的global.json文件。

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

从docs.microsoft.com:

  

global.json可以放在文件层次结构中的任何位置。 CLI从项目目录向上搜索找到的第一个global.json。您可以根据给定的global.json在文件系统中的位置来控制要应用的项目。 .NET CLI搜索从当前工作目录向上迭代路径的global.json文件。找到的第一个global.json文件指定使用的版本。如果安装了该版本,则使用该版本。如果找不到在global.json中指定的SDK,则.NET CLI会前滚到安装的最新SDK。未找到global.json文件时,前滚与默认行为相同。

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

答案 28 :(得分:0)

在项目发布中发生了同样的失败。 该问题与最新的 Microsoft.AspNetCore.App 软件包有关。只需将其从2.2.x下调至 2.2.0 或转到dotnet.microsoft.com/download/dotnet-core/2.2并获取最新的 dotnet托管安装程序

答案 29 :(得分:0)

还有另一种情况对我造成了此问题:

我正在使用服务帐户运行应用程序池标识,并且我必须在该用户下运行dotnet dev-certs https才能摆脱“ System.InvalidOperationException:无法配置HTTPS终结点”的问题。在启动过程中。

答案 30 :(得分:0)

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

答案 31 :(得分:0)

在Windows Server上部署针对.Net框架的.Net核心应用程序时,我遇到了同样的错误。我检查了服务器上的事件查看器,结果发现服务器未安装.net 4.7.2。

为我解决该问题。

答案 32 :(得分:0)

在我的情况下,这是 appsettings.json 中错误设置的日志级别。我有 Warn 而不是警告,这使应用程序崩溃并出现上述错误。

答案 33 :(得分:0)

我今天在托管时遇到了这个问题-在本地一切正常,但是一旦发布,就会出现此错误。

我仔细检查了软件包,发现一些.net核心内容已升级到3.0预览。

然后,我将VS2019中的生成选项从“框架相关”更改为“自包含”。构建和发布花费了5倍的时间,但现在可以了。

现在,我正在向主机技术支持人员检查什么可能是一个问题-正式地,它们仅支持2.1 / 2.2,因此这可能是3.0 Preview中的这些程序包,但是目标版本是2.2。

答案 34 :(得分:0)

此错误开始出现在我们的Dev服务器上。我一直在使用此发布命令创建一个“自包含”的文件文件夹以进行部署。

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

我的解决方法是改为使用以下命令发布“与框架相关的”部署:

dotnet publish --output:bin/framework_dependent

开发服务器确实在此文件夹* {C:\Program Files\dotnet\shared

中安装了几个版本的.NET Core(2.2.3和2.2.5)。

我仍然不清楚为什么自包含的发布不起作用。您可能会认为自包含发布将是更可靠的方法,但在我看来,它不是。

.NET Core blog post很有帮助。

答案 35 :(得分:0)

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

我更新了软件包,所有版本都匹配并在我的代码中进行了更新,.net核心版本匹配,重新启动IIS,重新启动...不高兴。

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

“便携式”是默认设置。我不确定“可移植”运行时如何正常运行,但是如果您不需要“可移植”运行时,可能会节省其他人的时间。

enter image description here