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

问题描述 投票:0回答:1

我有一个内部有多个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的实现,什么是好的方法?

是否有解决此问题的干净方法?

c# dll binding dependencies typeloadexception
1个回答
0
投票

最佳解决方案是避免这种情况。我们花费大量时间更新所有项目以使用相同版本的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>
© www.soinside.com 2019 - 2024. All rights reserved.