Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core Azure应用程序服务上的500.31 ANCM疑难解答_Asp.net Core_Azure Web App Service_Azure Pipelines_Webdeploy_Asp.net Core 3.1 - Fatal编程技术网

Asp.net core Azure应用程序服务上的500.31 ANCM疑难解答

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未能找到本机依赖项 这一问题的共同解决办法: 找不到指定

将项目从ASP.NET Core 3.0升级到ASP.NET Core 3.1后,我的应用程序停止在Azure应用程序服务上运行——但仅当从Azure DevOps管道使用连续部署发布时。(,如果我直接从Visual Studio发布,它将继续工作。)

具体而言,管道仍然能够使用Azure应用程序服务部署(
AzureRmWebAppDeployment
)任务进行发布,但无法在Azure应用程序服务环境中加载以下内容:

500.31 ANCM未能找到本机依赖项 这一问题的共同解决办法: 找不到指定版本的Microsoft.NetCore.App或Microsoft.AspNetCore.App

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

  • 作为应用程序的自包含版本发布,或发布到
  • 启用适当的运行时作为应用程序服务扩展(如果可用)
  • 在这种情况下,我知道.NET Core 3.1.2运行时在App Services环境中可用,并进一步确认这些解决方案无法解决此问题。这表示一个不同的基本错误

    ()。因为这是一个Azure应用程序服务,所以我查看了应用程序服务日志。然而,这些只是上述错误的副本,没有任何进一步的细节。此外,Azure Application Insights中没有记录异常,表明此错误在加载Application Insights之前发生

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

    应用程序服务日志与Windows事件查看器不同;它们将捕获异常,对于排除您没有看到的错误非常有用,但它们至少不会产生ANCM错误的额外信息。相反,您需要确保启用了详细的错误,以确保您也得到了ANCM检测到的特定错误

    启用详细错误 在ASP.NET核心应用程序中,可以使用
    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