Newtonsoft.json汇编包版本不匹配

我正在尝试使用SocketIO4Net在.net中创建socket.io客户端。 看来SocketIO4Net依赖于Newtonsoft.Json> = 4.0.8。 我也在使用PushSharp库,其Newtonsoft.Json依赖关系> = 4.5.10。 当我第一次安装PushSharp时,我得到了NewtonSoft.Json 4.5.11,我认为这个版本应该支持SocketIO4Net,因为它的版本更高,但每当我尝试连接到socket.io服务器时都会收到此错误。

无法加载文件或程序集’Newtonsoft.Json,Version = 4.0.8.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed’或其中一个依赖项。 定位的程序集的清单定义与程序集引用不匹配。 (HRESULTexception:0x80131040)

我一直在为这些依赖性问题敲打我的脑袋,如果有人能指出我正确的方向,我将非常感激。

找到解决方案,试试:

        

您可以修改程序集绑定配置并添加重定向。 请参阅在MSDN上重定向程序集版本 。

基本上您要将以下代码段添加到app.configweb.config文件中:

            

编辑

为什么需要重定向汇编版本? 尽管SocketIO4Net支持较新版本的Newtonsoft.Json,但它是针对单个版本编译的(在您的情况下为4.0.8)。 此版本存储在DLL中,用于加载SocketIO4Net依赖的DLL。

请注意,NuGet依赖项与DLL /运行时依赖项不同 – 对Newtonsoft.Json> = 4.0.8的NuGet依赖只意味着您将被允许将SocektIO4Net安装到具有较新版本的Newtonsoft.Json的项目中,它具有与运行时设置无关。

话虽这么说,如果您的项目有app.config或web.config文件,最近的NuGet版本应该自动为您添加程序集绑定重定向。

在app / web.config中添加程序集重定向;

      

请注意版本号需要与您安装的版本相匹配。

有同样的问题。

刚解决了。

它发生在NuGet用于安装Ext.NET之后,它对Newtonsoft.JSON有依赖性。
在/ bin中已经有一个Newtonsoft.JSON.dll文件(显然是对web.config文件中的引用)文件夹而没有检查我在调试时启动了NuGet Package-Install过程(所以文件可能有一个锁)。

在运行时错误窗口中,它将告诉您堆栈跟踪它有问题的清单的哪个部分,我的主要版本,所以我检查了安装包版本。 这是一个主要的版本。 找到原始的NuGet文件:“[物理路径] /../ packages / Newtonsoft.Json。[version] / lib / [.net version] /”

Manifest和Library都在那里,所以将它复制到/ bin文件夹,更新了根web.config程序集信息,它工作正常。

代码示例:之前

     

     

希望这可以帮助

就我而言,我用NuGet删除了包并安装了一个新包。 然后,从“引用”中删除引用并再次手动添加。 像魅力一样工作。 希望为你解决。

我最近在做一个旧项目。 我需要更新我们的Newtonsoft.Json.dll,因为我必须使用需要更新版本的“新”API,但我还有其他需要旧版本的DLL。

bindingRedirect你说? 不。 它一直在抱怨明显不匹配。

单独的codeBase标签? 不。 它一直在抱怨明显不匹配。

显然,问题是旧版本的Newtonsoft.Json.dll(3.0.0.0)没有PublicKeyToken ,但“新”版本(4.5.7.1)有一个PublicKeyToken 。 因此,他们无法共享相同的dependentAssembly-tag。

这就是我最终的结果:

         

得到以上错误:在Visual Studio 2013中修复:在包mamnager执行:Install-package newtonsoft.json这将在packages.config中添加一个新行删除上一行,该行可能指向packages.config上的先前版本。 删除packagers目录中的旧版本目录。 删除NewtonSoft.Json的引用并读取它指向最新版本。 一切都完成后,root webconfig将具有以下 。 关闭并重新打开视觉工作室。 这应该解决它。 我在安装PM> install-package durandal.starterkit时遇到了同样的错误我用上面的方法修复了。

刚刚与TeamCity发生这种情况,我想其他人很快就会遇到这种情况。 这可能适用于大多数提取NuGet包的构建服务器

所有做重定向的答案都是正确的。 但是,您仍需要定义正确的版本号。 我的项目使用的是Newtonsoft.Json 7.0 ,然而,他们刚刚发布了8.0而TeamCity正在下调8.0 ,这只会导致服务器上的问题,而不是本地问题。 我的所有重定向都设置为7.0

确保部署的应用程序实际上从NuGet获得正确的版本,而不仅仅是最新和最好的版本。 或者更新您的配置以指向最新版本。

上述解决方案是正确的,但还有一点不容忽视: app.config内容与上述解决方案相同。

            

但是检查它是否是最新的是一个好主意。 就我而言, Newtonsoft.JSON(v.6.0.4)已经依赖于另一个包。

在此处输入图像描述

有两种选择;

  1. 更新(Newtonsoft.JSON包)最新版本。
  2. 更新版本号中的app.config文件

如果你正在与多个项目合作,最后的建议,例如。 exe-dll并检查两个版本是否有Newtonsoft.JSON。

我已经轻松解决了这个问题:我没有从编译文件夹中复制xml配置文件。

我只是确保xml配置文件也包含在我的程序中,一切正常!