Asp.net core Azure应用程序服务上的500.31 ANCM疑难解答
将项目从ASP.NET Core 3.0升级到ASP.NET Core 3.1后,我的应用程序停止在Azure应用程序服务上运行——但仅当从Azure DevOps管道使用连续部署发布时。(,如果我直接从Visual Studio发布,它将继续工作。) 具体而言,管道仍然能够使用Azure应用程序服务部署(Asp.net core Azure应用程序服务上的500.31 ANCM疑难解答,asp.net-core,azure-web-app-service,azure-pipelines,webdeploy,asp.net-core-3.1,Asp.net Core,Azure Web App Service,Azure Pipelines,Webdeploy,Asp.net Core 3.1,将项目从ASP.NET Core 3.0升级到ASP.NET Core 3.1后,我的应用程序停止在Azure应用程序服务上运行——但仅当从Azure DevOps管道使用连续部署发布时。(,如果我直接从Visual Studio发布,它将继续工作。) 具体而言,管道仍然能够使用Azure应用程序服务部署(AzureRmWebAppDeployment)任务进行发布,但无法在Azure应用程序服务环境中加载以下内容: 500.31 ANCM未能找到本机依赖项 这一问题的共同解决办法: 找不到指定
AzureRmWebAppDeployment
)任务进行发布,但无法在Azure应用程序服务环境中加载以下内容:
500.31 ANCM未能找到本机依赖项
这一问题的共同解决办法:
找不到指定版本的Microsoft.NetCore.App或Microsoft.AspNetCore.App
现在,对于未安装.NET运行时的情况,我非常熟悉这个错误,这在Microsoft发布新版本后很常见。在这些情况下,典型的解决方案是:
Startup
类中的usedeveloperceptionpage()
中间件启用详细错误。在标准ASP.NET核心模板中,可以根据环境变量有条件地切换它们:
公共类启动{
…
公共静态无效配置(IApplicationBuilder应用程序,IWebHostEnvironment环境){
if(env.IsDevelopment()){
app.UseDeveloperExceptionPage();
}
}
}
在这种情况下,您只需将应用程序服务配置的ASPNETCORE\u环境
配置变量更改为Development
注意:这样做会暴露所有异常的详细信息,并可能导致潜在的安全漏洞。这只能在其他安全的开发环境中启用,或者作为面向公共服务器上的临时故障排除技术启用
检测到特定错误
就我而言,这暴露了以下几点:
500.31 ANCM未能找到本机依赖项
这一问题的共同解决办法:
找不到指定版本的Microsoft.NetCore.App或Microsoft.AspNetCore.App
ANCM检测到的特定错误:
错误:找不到应用程序依赖项清单(Project.deps.json)中指定的程序集:包:“Microsoft.Data.SqlClient”,版本:“1.0.19269.1”路径:“运行时/win/lib/netcoreapp2.1/Microsoft.Data.SqlClient.dll”
现在,应用程序所寻找的确切的底层依赖关系可能会有所不同。但关键的一点是,即使它能够加载正确的.NET运行时(.NET Core 3.1,在我的例子中),它仍然试图从.NET Core 2.1运行时加载遗留依赖项,从而触发此错误。但是,除非首先启用UseDeveloperExceptionPage()
,否则您无法确定Azure应用程序服务上的依赖关系
解决问题
实际的解决方案显然取决于您收到的确切错误。在这种情况下,提供对最新的Microsoft.Data.SqlClient
NuGet包的显式引用可以解决问题,并允许Azure应用程序服务正确显示站点
尽管如此,我仍然不清楚为什么直接从VisualStudio发布时这种方法有效,但在通过Azure DevOps管道发布时失败。我知道在使用
dotnet publish
的各种标志时,所包含的依赖项可能会有细微的差异,因此,我的假设是,Visual Studio和Azure应用程序服务部署任务调用dotnet publish
之间存在差异。在我们的例子中,应用程序服务上的日志扩展需要更新到dotnet 5