C# System.TypeLoadException在具有不同版本的重复依赖项上发生

C# System.TypeLoadException在具有不同版本的重复依赖项上发生,c#,dll,binding,dependencies,typeloadexception,C#,Dll,Binding,Dependencies,Typeloadexception,我有一个C#解决方案,里面有几个C#项目 一个项目依赖于两个dll,它们本身依赖于相同的dll,但版本不同,如下所示: Project -> dll1.dll -> System.IdentityModel.Tokens.Jwt.dll (Version=5.4.0.0) Project -> dll2.dll -> System.IdentityModel.Tokens.Jwt.dll (Version=4.0.4.4) 现在,当我使用dll2.dll时,它会引发以

我有一个C#解决方案,里面有几个C#项目

一个项目依赖于两个dll,它们本身依赖于相同的dll,但版本不同,如下所示:

Project -> dll1.dll -> System.IdentityModel.Tokens.Jwt.dll (Version=5.4.0.0) 
Project -> dll2.dll -> System.IdentityModel.Tokens.Jwt.dll (Version=4.0.4.4)
现在,当我使用dll2.dll时,它会引发以下异常:

System.TypeLoadException: 'Could not load type 'System.IdentityModel.Tokens.JwtSecurityTokenHandler' from assembly 'System.IdentityModel.Tokens.Jwt, Version=5.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.'
我阅读了有关AutoGenerateBinding的内容,并尝试将其设置为True和False,但两者都导致了异常。我缺乏处理此类案件的经验,需要关于如何解决此类冲突的建议/好文章。如果我既不能控制dll1.dll或dll2.dll的实现,那么什么是好方法

这个问题有没有干净的解决办法

编辑:

我在我的项目中添加了一个绑定重定向,如建议的,用于此dll的所有用法,并通过nuget在所有相同版本中安装:

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

有没有办法避免我希望通过bindingRedirect获得准确版本的愿望被覆盖

已解决:
像这里描述的那样解决它。我删除了所有Nuget包并链接到dll1引用的同一个dll。此外,我删除了所有绑定重定向,并在项目设置中将AutoGenerateBindings设置为False。

最好的解决方案是避免这种情况。我们花费大量时间更新所有项目以使用同一版本的dll。但是,如果无法避免,可以使用绑定重定向以非常详细的方式进行控制:

<runtime>
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
          <assemblyIdentity name="System.Web.Http" publicKeyToken="31BF3856AD364E35" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
       </dependentAssembly>
   </assemblyBinding>
</runtime>

在我尝试了你的建议之后,我编辑了我的问题。问题是,在运行时似乎仍然使用了错误的.dll版本。我不明白为什么以及如何避免它。