HTTP 错误 500.32 - 将自包含 .Net Core 3.1 应用程序部署到 Azure 后,ANCM 无法加载 dll

Posted

技术标签:

【中文标题】HTTP 错误 500.32 - 将自包含 .Net Core 3.1 应用程序部署到 Azure 后,ANCM 无法加载 dll【英文标题】:HTTP Error 500.32 - ANCM Failed to Load dll after deploying a Self Contained .Net Core 3.1 App to Azure 【发布时间】:2022-02-18 15:50:03 【问题描述】:

我有一个部署到 Azure 应用服务(基于西欧/Windows)的 Asp .NET Core 3.1 应用。当我使用框架依赖部署模式时,应用程序启动顺利。

但是,当我尝试切换到自包含部署时,应用程序无法启动并且我收到一条错误消息:HTTP 错误 500.30 - ANCM In-Process Start Failure

将运行时从 win-x86 更改为 x64 并没有解决问题。

我检查了已安装的 App Server 运行时版本,看起来运行时可用(参见下面的屏幕截图)。

我做错了什么?

【问题讨论】:

仔细检查您的Startup.cs 和/或Program.cs 文件github.com/dotnet/aspnetcore/issues/8980 @rak007 这不是问题,我没有双重注册,它在我的本地机器上运行良好。 【参考方案1】:

如果上述方法不能解决您的问题,并且如果您在https://github.com/dotnet/aspnetcore/issues/8980 中错过了它,但这解决了我的问题。

Per DimaSUN 于 2019 年 6 月 25 日发表评论:

ASP.NET Core 2.2 或更高版本:对于使用进程内托管模型的 64 位 (x64) 独立部署,请禁用 32 位 (x86) 进程的应用程序池。

如何: 在 IIS 中打开应用程序池。选择网站 > 高级设置。 将 32 位应用程序从 True 设置为 False。

【讨论】:

【参考方案2】:

对于 .net 5,问题与我必须从 web.config 中删除 hostingModel="inprocess" 相同,因此它读取以下内容

<?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=".\Hub.WebApi.exe" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout"  />
 </system.webServer>
</location>
</configuration>

【讨论】:

【参考方案3】:

您是否尝试过在您的应用服务中添加 .Net Core 3.1 扩展?开发工具 -> 扩展 -> 添加 -> Asp.Net Core 3.1 以及您需要的运行时。

我昨天遇到了同样的问题,添加扩展后问题就消失了。

【讨论】:

感谢您的提示!不幸的是,我尝试添加扩展名,现在我得到一个 HTTP 403 --> 服务器根本没有启动。知道这是从哪里来的吗?【参考方案4】:

如果它可以帮助其他人...我的Program.cs 中仍然有UseKestrel()(考虑到others mentioned the hosting model as the culprit,这是有道理的)。

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder => 
            webBuilder.UseKestrel(k => k.AddServerHeader = false);
            webBuilder.UseStartup<Startup>();
        );

移除 Kestrel(自然地)可以缓解问题。

我最终也在Kudu Debug Console...中看到了这个...

应用程序正在 IIS 进程中运行,但未配置为使用 IIS服务器

【讨论】:

【参考方案5】:

与此错误提供的故障排除提示完全无关,这也可能是由于应用程序池帐户对.NET Core应用程序的源目录权限不足造成的.

当服务帐户只有读取权限时,我收到了这个错误。添加读取和执行权限(因为应用程序是.exe)后,错误消失了。

【讨论】:

以上是关于HTTP 错误 500.32 - 将自包含 .Net Core 3.1 应用程序部署到 Azure 后,ANCM 无法加载 dll的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 正在将自定义 http 代码转换为 502 错误网关

是否可以将自定义错误页面与 MVC 站点一起使用,但不能在 Web API 中使用?

如何将自定义对象保存在包含更多自定义对象的数组中

如何将自定义结构插入另一个包含初始结构的二维指针的结构中?

MFC:如何将自定义控件包含到 Visual Studio 的工具箱中

如何将自定义类型的列表/数组写入 HDF5 文件?