У меня есть 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>
Все еще то же исключение, кажется, что требование от dll, на который ссылаются, каким-то образом перезаписывает требование от моего проекта. Я установил подробный уровень информации о сборке на подробный, поэтому во время перестройки я получаю следующий вывод:
Есть ли во избежание, чтобы мой wi sh для точной версии через bindingRedirect перезаписывается?
Решено: Решено, как описано здесь stackoverflow . Я удалил все пакеты Nuget и связал их с той же самой DLL, на которую ссылается dll1. Кроме того, я удалил все перенаправления привязки и установил для AutoGenerateBindings значение False в настройках проекта.