MSOnline Не удалось загрузить тип 'System.IdentityModel.Tokens.JwtSecurityToken' - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть основное веб-приложение asp.net, которое использует модуль PowerShell MSOnline для взаимодействия с Office 365. Когда командлет Connect-MsolService выполняется для аутентификации в Office 365, я получаю следующую ошибку.

Не удалось загрузить тип 'System.IdentityModel.Tokens.JwtSecurityToken' из сборки 'System.IdentityModel.Tokens.Jwt, версия = 5.1.5.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35'.

При выполнении той же логики в другом проекте через модульное тестирование я не получаю сообщение об ошибке, код выполняется так, как ожидалось.И тестовый проект, и веб-проект используют одну и ту же версию (5.1.5) сборки System.IdentityModel.Tokens.Jwt, поэтому я не понимаю, почему я получаю эту ошибку, когда эта логика выполняется в веб-приложении.

Я читал, что решением является снижение версии до * 4 сборки System.IdentityModel.Tokens.Jwt, но я знаю, что она работает с 5.1.5, потому что мои тесты проходят.Кроме того, это не вариант для меня, потому что для некоторых сборок aspnetcore требуется v5.Кто-нибудь понимает, почему это происходит в основном веб-приложении asp.net, или знает решение, которое не требует понижения сборки?

Обновление:

Похожекак мое перенаправление привязки вызывает проблему.Если я добавлю следующее в файл app.config в моем тестовом проекте, это приведет к ошибке.Это очень странно, потому что 5.1.5 - это версия System.IdentityModel.Tokens.Jwt, на которую ссылаются, как будто по умолчанию используется другая версия.

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.4.0.0" newVersion="5.1.5.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

1 Ответ

0 голосов
/ 27 февраля 2019

Я решил эту проблему, исключив перенаправление привязки для System.IdentityModel.Tokens.Jwt.Перенаправление привязки было создано автоматически, потому что я использовал опцию Auto-generate binding redirects.Я решил просто отключить эту опцию и вручную управлять перенаправлением привязки, чтобы устранить нежелательное перенаправление.

Чтобы упростить процесс, я просто скопировал автоматически сгенерированные перенаправления привязки из выходного файла конфигурации и вставил их в файл моих проектов app.config.Затем я удалил перенаправление System.IdentityModel.Tokens.Jwt и с отключенной опцией Auto-generate binding redirects он использовал только перенаправления в моем файле app.config вместо генерации, которая решила проблему.

Я до сих пор не понимаю, почемуперенаправление вызывает эту ошибку, надеюсь, кто-то в конечном итоге пролил некоторый свет на это, но, к счастью, я нашел обходной путь.

Одна вещь, на которую следует обратить внимание, если какая-либо из ваших зависимостей использует разные версии этой сборки, это, очевидно, не будет работать,К счастью для меня, это не так, по крайней мере сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...