Устранение неполадок 500,31 ANCM в службе приложений Azure - PullRequest
1 голос
/ 25 марта 2020

После обновления проекта с ASP. NET Core 3.0 до ASP. NET Core 3.1 мое приложение перестало работать на Azure Службы приложений - но только при публикации с использованием непрерывного развертывания из Azure DevOps Pipelines . ( Аналогично другому вопросу , он продолжает работать, если я публикую sh непосредственно из Visual Studio.)

В частности, конвейер все еще может публиковать sh с помощью Azure Задача службы приложений развернуть (AzureRmWebAppDeployment), но она не загружается в среде службы приложений Azure с исключением 500.32 :

500.31 ANCM не удалось найти собственные зависимости

Общие решения этой проблемы:

Указанная версия Microsoft.NetCore.App или Microsoft.AspNetCore.App не найдена.

Теперь я хорошо знаком с этой ошибкой для случаев, когда среда выполнения. NET не установлена, как это обычно происходит сразу после выпуска Microsoft новых версий. В этих случаях типичным решением является либо:

  1. Publi sh как --self-contained версия приложения, либо
  2. Включение соответствующей среды выполнения как Расширение службы приложений , если доступно.

В этом случае я знаю . NET Среда выполнения Core 3.1.2 доступна в среде служб приложений, и дополнительно подтвердили, что эти решения не решают проблему. Это указывает на другую основную ошибку.

Другие темы предлагают искать эту информацию в Windows Event Viewer ( и здесь ). Поскольку это Azure Служба приложений, я вместо этого посмотрел в Журналы службы приложений . Они включали только копию вышеуказанной ошибки, однако без каких-либо дополнительных подробностей. Кроме того, нет исключений, зарегистрированных в Azure Application Insights , указывающих на то, что эта ошибка возникает до загрузки Application Insights.

Учитывая это, мой вопрос: как устранить неполадки 500.31 ошибок в Azure службе приложений?

1 Ответ

1 голос
/ 25 марта 2020

Журналы службы приложения не аналогичны Windows Event Viewer ; они фиксируют исключения и полезны для устранения ошибок, которые вы не видели, но, по крайней мере, не дадут дополнительную информацию об ошибках ANCM. Вместо этого вам нужно убедиться, что подробные ошибки включены, чтобы гарантировать, что вы также получаете ошибку Speci c, обнаруженную ANCM .

Включение подробных ошибок

В базовом приложении ASP. NET подробные ошибки можно включить с помощью промежуточного программного обеспечения UseDeveloperExceptionPage() в классе Startup. В стандартном шаблоне ASP. NET Core их можно условно переключать на основе переменной среды:

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

В этом случае вам просто нужно изменить конфигурацию ASPNETCORE_ENVIRONMENT конфигурации службы приложений. переменная Development.

Примечание: При этом раскрываются подробности о всех исключениях, что может привести к потенциальным уязвимостям безопасности. Это должно быть включено только для защищенных сред разработки или в качестве временного метода устранения неполадок на сервере publi c.

Specifi c обнаружена ошибка

В моем случае это выявило следующее:

500.31 ANCM не удалось найти собственные зависимости

Общие решения этой проблемы:

Указанное версия Microsoft.NetCore.App или Microsoft.AspNetCore.App не найдена.

Specifi c Ошибка, обнаруженная ANCM:

Ошибка: сборка, указанная в манифесте зависимостей приложения (Project .deps. json) не найден: пакет: «Microsoft.Data.SqlClient», версия: «1.0.19269.1», путь: «runtimes / win / lib / netcoreapp2.1 / Microsoft.Data.SqlClient.dll»

Теперь точная базовая зависимость, которую ищет ваше приложение, вероятно, будет другой. Но критический момент заключается в том, что, несмотря на то, что он может загрузить правильную. NET среду выполнения (. NET Core 3.1 в моем случае), он все еще пытается загрузить устаревшую зависимость из. NET Core 2.1 среды выполнения, таким образом вызывая эту ошибку. Но вы не сможете определить, что это за зависимость от Azure Службы приложений, если вы сначала не включите UseDeveloperExceptionPage().

Решение проблемы

Фактическое решение, очевидно, будет зависеть на точную ошибку, которую вы получаете. В этом случае предоставление явной ссылки на последний пакет Microsoft.Data.SqlClient NuGet решает проблему и позволяет службе приложений Azure правильно отображать сайт.

При этом Мне остается неясным, почему это работает при публикации непосредственно из Visual Studio, но завершается ошибкой при публикации через Azure DevOps Pipeline. Я знаю, что могут быть тонкие различия в том, какие зависимости включены при использовании различных флагов dotnet publish, поэтому я предполагаю, что есть разница между тем, как Visual Studio и Azure App Service Deploy вызовом задачи dotnet publish.

...