Журналы службы приложения не аналогичны 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
.