当前位置:  开发笔记 > Android > 正文

在WebAPI2项目中加载System.IdentityModel.Tokens.Jwt dll时出错

如何解决《在WebAPI2项目中加载System.IdentityModel.Tokens.Jwtdll时出错》经验,为你挑选了2个好方法。

我在WebApi2项目中收到以下错误:

无法加载文件或程序集'System.IdentityModel.Tokens.Jwt,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

我安装了这些相关的NuGet包以及其他一些包:

"Microsoft.IdentityModel.Protocol.Extensions"version ="1.0.2.206221351"targetFramework ="net45"

"Microsoft.Owin"version ="3.0.1"targetFramework ="net45"

"Microsoft.Owin.Host.SystemWeb"version ="3.0.1"targetFramework ="net45"

"Microsoft.Owin.Security"version ="3.0.1"targetFramework ="net45"

"Microsoft.Owin.Security.ActiveDirectory"version ="3.0.1"targetFramework ="net45"

"Microsoft.Owin.Security.Jwt"version ="3.0.1"targetFramework ="net45"

"Microsoft.Owin.Security.OAuth"version ="3.0.1"targetFramework ="net45"

"System.IdentityModel.Tokens.Jwt"version ="4.0.2.206221351"targetFramework ="net45"

顺便说一下,我的web.config中也有以下绑定重定向,但它仍然试图加载4.0版本.

  
    
    
  

任何有关故障排除的帮助将非常感谢.



1> Tomino..:

我遇到了完全相同的麻烦.

原因是,最新版本的System.IdentityModel.Tokens.Jwt和S​​ystem.IdentityModel.Tokens有一些NuGet版本mishmash,它们与启动UseJwtBearerAuthentication方法不兼容,后者需要System.IdentityModel v.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稳定版.

但是,当您在WebAPI中设置JWT身份验证时

app.UseJwtBearerAuthentication(new JwtOptions());

System.IdentityModel版本4.0.0.0是必需的.

我的工作解决方案是:

1)卸载以前安装的System.IdentityModel.Tokens 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)向.NET框架程序集System.IdentityModel添加引用(不是nuget!).右键单击项目 - >引用 - >添加引用 - >程序集 - >框架 - >选择System.IdentityModel 4.0.0.0

某些步骤可能会有所不同,具体取决于您已安装/卸载的内容.



2> stukselbax..:

在我的情况下,添加绑定重定向有帮助.

我有一个Windows服务应用程序,它使用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]:


  False
  ..\..\packages\System.IdentityModel.Tokens.Jwt.4.0.0\lib\net45\System.IdentityModel.Tokens.Jwt.dll

上面提到的例外情况恰好在调用时发生:

app.UseJwtBearerAuthentication(new CustomJwtOptions());

所以我可以得出结论,Microsoft.Owin.Security.Jwt(3.0.1)包尝试加载System.IdentityModel.Tokens.Jwt(4.0.0)

编辑

我们有简单的.net应用程序,它与app.exe.config文件一起分发.修改文件有助于解决上述问题:





    
    
        
        
            
            
        
        
    
    



推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有