【问题标题】:Error loading System.IdentityModel.Tokens.Jwt dll in WebAPI2 project在 WebAPI2 项目中加载 System.IdentityModel.Tokens.Jwt dll 时出错
【发布时间】:2016-03-28 09:40:55
【问题描述】:

我在 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" version="3.0.1" targetFramework="net45"

"Microsoft.Owin.Security" 版本="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”版本="3.0.1" targetFramework="net45"

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

顺便说一句,我的 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>

我们将非常感谢您在故障排除方面的任何帮助。

【问题讨论】:

  • 检查 System.IdentityModel.Tokens 版本,应该是 4.0.0.0。

标签: asp.net-web-api2 owin jwt


【解决方案1】:

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

原因是,最新版本的 System.IdentityModel.Tokens.Jwt 和 System.IdentityModel.Tokens 有一些 NuGet 版本混搭,它们与需要 System.IdentityModel v. 4.0.0.0 的启动 UseJwtBearerAuthentication 方法不兼容.

如果你使用的是 nuget,你很容易混淆,因为:

System.IdentityModel.Tokens 在 nuget 中可用,就像预发布版 5.0.0.112(现在)

nuget 中的 System.IdentityModel.Tokens.Jwt 最新版本可作为预发布版本 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

根据您已安装/卸载的内容,某些步骤可能会有所不同。

【讨论】:

  • 成功了!! PM> 卸载包 Microsoft.Owin.Security.Jwt PM> 卸载包 System.IdentityModel.Tokens.Jwt PM> 安装包 System.IdentityModel.Tokens.Jwt -Version 4.0.2.206221351 PM> 安装包 Microsoft.Owin。安全.Jwt
  • 成功了!谢谢。
【解决方案2】:

在我的情况下,添加 binding redirect 会有所帮助。

我有一个 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]

<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>

上述异常发生在调用的确切时间:

app.UseJwtBearerAuthentication(new CustomJwtOptions());

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

编辑

我们有一个简单的 .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>

【讨论】:

  • 我遇到了与您描述的完全相同的问题。实际上你做了什么来解决它?当您说“在我的情况下添加绑定重定向有帮助”时,我真的无法理解。
  • 编辑了答案,增加了更多的清晰度和配置示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
相关资源
最近更新 更多