我遇到的情况是我在Unity3D项目中使用了一个类库,并且该类库使用Json序列化/反序列化。由于官方的NewtonSoft.Json NuGet无法与Unity配合使用,因此我使用的是Json.Net.Unity3D(v。9.0.0.0),到目前为止它运行良好。
现在,我正在建立另一个项目,其中的主要组件之一依赖于NewtonSoft.Json(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,因此绑定重定向将不起作用。我一直在尝试寻找解决此问题的方法,但未成功,但需要一些输入。这些是我想出的可能选项:
任何见识将不胜感激-我已经在这个问题上浪费了太多时间。
答案 0 :(得分:0)
我不确定这是否行得通,但是您可以尝试通过nuget包引用v9,并从dll文件中手动引用v11,该dll文件将“始终复制”到输出目录,而且它应该具有其他文件名称。这样,输出程序集应该加载两个json dll-v9和v11。
答案 1 :(得分:0)
我最终决定通过合理的工作量是不可能的,因此我采取了另一种方法。我创建了一个接口,该接口提供了与我的库所使用的NewtonSoft.Json相同的方法(即JsonConvert.Serialize和Deserialize),然后制作了一个包装器,在引用该库的每个项目中实现了该接口。这使我可以从库中完全删除对NewtonSoft.Json的任何引用,并且在每个项目中只需要少量重复的代码即可。