Функция Azure: не удалось загрузить файл или сборку Microsoft.IdentityModel.Tokens, Version = 5.2.1.0

Я пишу лазурную функцию для генерации токена JWT и возврата его клиенту. Код тестируется локально в консольном приложении, и, похоже, все работает нормально. Это ссылка на пакет, включенная в рабочее консольное приложение и в мое приложение с функциями:

<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.2.1" />

При локальном запуске функции host с func host start и выполнении кода это приводит к ошибке:

Could not load file or assembly 'Microsoft.IdentityModel.Tokens, Version=5.2.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'."

Я не понимаю, почему это происходит, dll лежит в выходной папке вместе с dll моего приложения. Единственное, что я могу придумать, это то, что у функционального хоста есть свой собственный набор пакетов, из которых он исходит, а этот еще недоступен, он был выпущен всего 12 дней назад.

Я не уверен. Любая помощь о том, почему это происходит или как это обойти?

Подробности:
Основные инструменты функций Azure (2.0.1-beta.22)
Среда выполнения функции Версия: 2.0.11415.0


person Craigt    schedule 20.02.2018    source источник
comment
Если есть демонстрационный код, будет более полезным.   -  person Tom Sun - MSFT    schedule 21.02.2018
comment
При обработке запроса возникло необработанное исключение. FileLoadException: не удалось загрузить файл или сборку System.IdentityModel.Tokens.Jwt, Version = 5.2.1.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35.   -  person ubienewbie    schedule 16.03.2018
comment
Я получаю v.similar ... работает локально, не работает при нажатии на лазурный ...   -  person ubienewbie    schedule 16.03.2018


Ответы (2)


У меня возникла эта проблема, и, похоже, она связана с какой-то ошибкой в ​​SDK функций Azure. исправление заключалось в добавлении:

<_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput>

в ваш файл csproj. Как указано здесь

person Liam    schedule 26.10.2020

Мне удалось решить именно эту проблему, используя старую версию пакета nuget. Моей отправной точкой было то, что я скопировал файл класса из старого проекта в новый. Файл класса ссылается на JwtSecurityToken. Это не было скомпилировано в новом проекте, поэтому я добавил Security.IdentityModel.Tokens.Jwt из диспетчера пакетов nuget. Я только что добавил последнюю версию. Локально это сработало нормально, но, как и вы, не удалось при публикации в лазурном. Затем я посмотрел на старый проект и заметил, что он использовал 5.1.4 этого Security.IdentityModel.Tokens.Jwt. Итак, я перешел на эту версию, и теперь она работает после публикации.

fwiw: это предварительная версия времени выполнения v2 на тот момент, когда я это сделал.

https://<mysite>.azurewebsites.net/admin/host/status?code=<myadminkey>
{
"id": "<mysite>",
"state": "Running",
"version": "2.0.11587.0",
"versionDetails": "2.0.11587.0-beta1 Commit hash: 1e9e7a8dc8a68a3eff63ee8604926a8d3d1902d6"
}
person ubienewbie    schedule 17.03.2018