我有一个内部有多个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。但是,如果无法避免,则可以使用绑定重定向以非常详细的方式进行控制:
<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>