gpt4 book ai didi

asp.net-core - Azure 应用服务上的 500.31 ANCM 故障排除

转载 作者:行者123 更新时间:2023-12-05 00:57:13 26 4
gpt4 key购买 nike

将项目从 ASP.NET Core 3.0 升级到 ASP.NET Core 3.1 后,我的应用程序停止在 Azure App Services 上运行——但在使用Azure DevOps Pipelines中的持续部署发布时。 ( Similar to another question ,如果我直接从 Visual Studio 发布,它会继续工作。)

具体来说,管道仍然能够使用 Azure App Service Deploy (AzureRmWebAppDeployment) 任务进行发布,但无法在 Azure App Service 环境中加载500.32 exception :

500.31 ANCM Failed to Find Native Dependencies

Common solutions to this issue:

The specified version of Microsoft.NetCore.App or Microsoft.AspNetCore.App was not found.

现在,对于未安装 .NET 运行时的情况,我非常熟悉此错误,这在 Microsoft 发布新版本后立即很常见。在这些情况下,典型的解决方案是:

  1. 发布为应用程序的--self-contained 版本,或发布到
  2. 启用适当的运行时作为应用服务扩展(如果可用)。

在这种情况下,我知道 .NET Core 3.1.2 运行时在应用服务环境中可用,并且另外确认这些解决方案不能解决问题。这表明存在不同的潜在错误。

Other threads suggest looking for those details in the Windows Event Viewer (and here as well)。由于这是一项 Azure 应用服务,因此我查看了 应用服务日志。但是,这些仅包括上述错误的副本,没有任何进一步的细节。此外,Azure Application Insights 中没有记录异常,这表明此错误是在 Application Insights 加载之前发生的。

鉴于此,我的问题是:如何解决 Azure 应用服务上的 500.31 错误?

最佳答案

应用服务日志Windows事件查看器不同;它们将捕获异常,并且对于排除您没有看到的错误很有用,但它们至少不会为 ANCM 错误提供额外信息。相反,您需要确保启用详细错误,以确保您也收到由 ANCM 检测到的特定错误

启用详细错误

在 ASP.NET Core 应用程序中,可以使用 Startup 类中的 UseDeveloperExceptionPage() 中间件启用详细错误。在标准 ASP.NET Core 模板中,可以根据环境变量有条件地切换它们:

public class Startup {

public static void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
}
}
}

在这种情况下,您只需将应用服务配置的 ASPNETCORE_ENVIRONMENT 配置变量更改为 Development

Note: Doing this exposes details about all exceptions and can lead to potential security vulnerabilities. This should only be enabled for otherwise-secured development environments, or as a temporary troubleshooting technique on a public-facing server.

检测到特定错误

就我而言,这暴露了以下内容:

500.31 ANCM Failed to Find Native Dependencies

Common solutions to this issue:

The specified version of Microsoft.NetCore.App or Microsoft.AspNetCore.App was not found.

Specific error detected by ANCM:

Error: An assembly specified in the application dependencies manifest (Project.deps.json) was not found: package: 'Microsoft.Data.SqlClient', version: '1.0.19269.1' path: 'runtimes/win/lib/netcoreapp2.1/Microsoft.Data.SqlClient.dll'

现在,您的应用程序正在寻找的确切底层依赖项可能会有所不同。但关键点是,即使它能够加载正确的 .NET 运行时(在我的例子中是 .NET Core 3.1),它仍在尝试从 .NET Core 2.1 运行时加载旧依赖项,从而触发此错误。但是,除非您首先启用 UseDeveloperExceptionPage(),否则您将无法确定 Azure App Service 的依赖关系。

解决问题

实际的解决方案显然取决于您收到的确切错误。在这种情况下,提供对最新 Microsoft.Data.SqlClient NuGet 包的显式 引用可以解决问题,并允许 Azure 应用服务正确显示站点。

也就是说,我仍然不清楚为什么这在直接从 Visual Studio 发布时有效,但在通过 Azure DevOps 管道发布时失败。我知道在使用 dotnet publish 的各种标志时包含的依赖项可能存在细微差别,所以我的假设是 Visual Studio 和 Azure App Service Deploy 的方式之间存在差异 任务调用dotnet publish.

关于asp.net-core - Azure 应用服务上的 500.31 ANCM 故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60839745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com