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.config
或web.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)已经依赖于另一个包。
有两种选择;
- 更新(Newtonsoft.JSON包)最新版本。
- 更新版本号中的app.config文件 。
如果你正在与多个项目合作,最后的建议,例如。 exe-dll并检查两个版本是否有Newtonsoft.JSON。
我已经轻松解决了这个问题:我没有从编译文件夹中复制xml配置文件。
我只是确保xml配置文件也包含在我的程序中,一切正常!