Итак, у меня есть веб-приложение .NET Core 2.2. Я добавил к нему библиотеку EPPlus, и теперь, когда она выпущена в Azure (служба приложений), она не запускается, и я получаю сообщение об ошибке:
HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure
Я сузил это, запустив консоль в Azure и команду: «dotnet my.project.dll» — и получил реальную ошибку:
An assembly specified in the application dependencies manifest (my.project.deps.json) was not found: package: 'Microsoft.Win32.SystemEvents', version: '4.5.0' path: 'runtimes/win/lib/netcoreapp2.0/Microsoft.Win32.SystemEvents.dll'
Файл Microsoft.Win32.SystemEvents.dll находится в основной папке wwwroot, в которой развернуто приложение. Но я не думаю, что вся папка runtimes/win/libs/ вообще существует.
В файлах my.project.deps.json есть раздел, который выглядит следующим образом:
"Microsoft.Win32.SystemEvents/4.5.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "2.2.0"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll": {
"assemblyVersion": "4.0.0.0",
"fileVersion": "4.6.26515.6"
}
},
"runtimeTargets": {
"runtimes/win/lib/netcoreapp2.0/Microsoft.Win32.SystemEvents.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.0.0.0",
"fileVersion": "4.6.26515.6"
}
}
}
Если я удалю весь раздел "runtimeTargets", то приложение работает! (Ну, я должен сделать то же самое для еще нескольких dll: System.Drawing.Common и System.Security.Cryptography.Pkcs)
Но файл полностью регенерируется всякий раз, когда он публикуется и выпускается, поэтому это нежизнеспособное решение. Я также не знаю, что делает этот раздел файла. Возможно, важно оставить это. Хотя все работает, так что это не может быть так важно...
Он создается и публикуется через TeamCity — я не эксперт в этом процессе, но я думаю, что выполняемая команда сводится к следующему:
dotnet publish my.proj.csproj --configuration RELEASE --no-restore --no-build
Пробовали и другие вещи: <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest> не имел никакого эффекта
У кого-нибудь есть идеи?
Как оказалось, это была моя вина :(
Team City был создан пакет NuGet на основе опубликованных выходных данных. Но папка /runtimes не была включена в пакет, поэтому никогда не выпускалась как часть сайта.
Я отредактировал файл nuspec, включив его в /runtimes, и все работает нормально.
У меня была такая же проблема. После сборки я скопировал все файлы в каталог "production" командой DOS copy
, поэтому файлы из подпапки "runtimes" пропали. Копирование всех файлов, включая все подкаталоги (с помощью xcopy
), устранило проблему.
Я столкнулся с той же ошибкой, что и ваша. Кстати, как включить время выполнения в nuspecs?