2015-12-22 3 views
14

Я получаю ошибку ниже в проекте WebApi2:Ошибка загрузки System.IdentityModel.Tokens.Jwt DLL в проекте WebAPI2

Не удалось загрузить файл или сборку «System.IdentityModel.Tokens.Jwt, Version = 4.0.0.0 , Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'или одна из его зависимостей. Определение манифеста размещенной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

У меня есть эти набор связанных пакетов NuGet установлен, вместе с кучей других:

"Microsoft.IdentityModel.Protocol.Extensions" версия = "1.0.2.206221351" targetFramework = "net45"

"Microsoft.Owin" версия = "3.0.1" targetFramework = "net45"

"Microsoft.Owin.Host.SystemWeb" версия = "3.0.1" targetFramework = "net45"

"Microsoft.Owin.Security" version = "3.0.1" ta rgetFramework = "net45"

"Microsoft.Owin.Security.ActiveDirectory" версия = "3.0.1" targetFramework = "net45"

"Microsoft.Owin.Security.Jwt" версия = "3.0.1" targetFramework = "net45"

"Microsoft.Owin.Security.OAuth" версия = "3.0.1" targetFramework = "net45"

"System.IdentityModel.Tokens.Jwt" версия = "4.0.2.206221351" targetFramework = "net45"

Btw, у меня есть связанная переадресация в моем web.config тоже но он все же пытается загрузить версию 4.0.

<dependentAssembly> 
    <assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.0.20622.1351" newVersion="4.0.20622.1351" /> 
    </dependentAssembly> 

Любая помощь при поиске и устранении неисправностей была бы высоко оценена.

+1

Проверить версию System.IdentityModel.Tokens, должно быть 4.0.0.0. – Tomino

ответ

24

Я столкнулся с такими же проблемами.

Причина заключается в том, что последние версии System.IdentityModel.Tokens.Jwt и System.IdentityModel.Tokens имеет некоторые версии NuGet мешанина, и они не совместимы с методом запуска UseJwtBearerAuthentication, который требует System.IdentityModel ст. 4.0. 0.0.

Если вы используете NuGet, вы можете легко спутать, потому что:

System.IdentityModel.Tokens доступен в NuGet так же, как пре-релиз 5.0.0.112 (Nowdays)

System.IdentityModel .Tokens.Jwt последняя версия в nuget доступна в виде предварительной версии 5.0.0.112 или 4.0.2.206221351 стабильной.

НО, когда вы установили аутентификацию JWT в WebAPI

app.UseJwtBearerAuthentication(new JwtOptions()); 

System.IdentityModel версия 4.0.0.0 требуется.

Рабочий раствор для меня:

1) деинсталлировать ранее установленный System.IdentityModel.Лексемы NuGet пакет

Uninstall-Package System.IdentityModel.Tokens 

2) удалить последнюю System.IdentityModel.Tokens.Jwt NuGet пакет

Uninstall-Package System.IdentityModel.Tokens.Jwt 

3) установить System.IdentityModel.Tokens.Jwt версию 4.0.2.206221351 (последняя стабильная)

Install-Package System.IdentityModel.Tokens.Jwt -Version 4.0.2.206221351 

4) добавить ссылку (не nuget!) В сборку .NET Framework System.IdentityModel. Щелкните правой кнопкой мыши по проекту -> Ссылки -> Добавить ссылку -> Ассембли -> Рамки -> выберите System.IdentityModel 4.0.0.0

Некоторые шаги могут отличаться в зависимости от того, что вы уже установили/удалили.

+0

Спасибо, спасибо, спасибо! – dviljoen

+1

работал !! PM> Uninstall-пакет Microsoft.Owin.Security.Jwt PM> Uninstall-пакет System.IdentityModel.Tokens.Jwt PM> Install-Package System.IdentityModel.Tokens.Jwt -Version 4.0.2.206221351 PM> install- Пакет Microsoft.Owin.Security.Jwt – Alex

+0

Работал! Спасибо. –

5

В моем случае добавлено binding redirect.

У меня есть приложение окна обслуживания, который потребляет Microsoft.Owin.Security.Jwt (3.0.1) и System.IdentityModel.Tokens.Jwt (4.0.20622.1351); Как можно видеть, Microsoft.Owin.Security.Jwt (3.0.1) имеет отношение к System.IdentityModel.Tokens.Jwt (4.0.0)[katanaproject]:

<Reference Include="System.IdentityModel.Tokens.Jwt, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\..\packages\System.IdentityModel.Tokens.Jwt.4.0.0\lib\net45\System.IdentityModel.Tokens.Jwt.dll</HintPath> 
</Reference> 

Исключение упоминалось выше имеет ocured точно, когда был сделан звонок:

app.UseJwtBearerAuthentication(new CustomJwtOptions()); 

Так что можно сделать вывод, что пакет Microsoft.Owin.Security.Jwt (3.0.1) пытается загрузить System.IdentityModel.Tokens.Jwt (4.0. 0)

EDIT

У нас есть простой .net приложение, которое распространяется с app.exe.config файла. Изменение файла поможет решить проблему:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
<!-- ... --> 
<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-4.0.20622.1351" 
          newVersion="4.0.20622.1351" /> 
     </dependentAssembly> 
     <!-- ... --> 
    </assemblyBinding> 
    <!-- ... --> 
</runtime> 
<!-- ... --> 
</configuration> 
+0

Я попал в точно такую ​​же проблему, как вы описали. Что вы на самом деле решили решить? Я не мог понять, когда вы сказали: «В моем случае помогает добавление связующего перенаправления». – tyrion

+0

Отредактировав ответ, добавили более четкость и образец конфигурации. – stukselbax

+0

Спасибо, что решил. – tyrion

Смежные вопросы