У меня есть ситуация, когда у меня есть библиотека классов, используемая в проекте Unity3D и использующая сериализацию / десериализацию Json.Поскольку официальный NewtonSoft.Json NuGet не работает вместе с Unity, я использую Json.Net.Unity3D (v. 9.0.0.0), который до сих пор работал нормально.
Теперь янастройка другого проекта, в котором один из основных компонентов зависит от NewtonSoft.Json (v. 11.0.0.0).Этот новый проект также должен ссылаться на ранее упомянутую библиотеку классов.Это без проблем компилируется, но когда библиотека классов пытается использовать функции Json, она не может найти необходимую библиотеку Json, и я получаю сообщение об ошибке.
System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' ---> System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'
Так как две версии библиотеки Json имеют разные PublicKeyTokens, перенаправление привязки не будет работать.Я безуспешно пытался найти решение этой проблемы, но мне понадобится немного информации.Вот возможные варианты, которые я предложил:
- Предотвращение распространения библиотеки Json основного проекта в ссылочный проект.Если я запускаю тестовую версию, в которой основной проект вообще не имеет библиотеки Json, подпроект работает нормально.
- Взлом перенаправления привязки для принятия разных dll: s для разных версий.Кажется невозможным.
- Наличие обеих версий, установленных в основном проекте и используемых там, где это необходимо.Также кажется, что это не стартер.
Любое понимание будет высоко оценено - я уже потратил слишком много времени на эту проблему.
Вот небольшой тестрешение, которое демонстрирует проблему