Newtonsoft.Json 10.0.3版本报错,6.0.1正常,求助解决程序集加载问题
解决Newtonsoft.Json版本不匹配的问题
看起来你遇到的是典型的程序集版本绑定冲突问题——虽然你自己的项目明确引用了10.0.3版本,但有某个依赖组件(可能是你引用的SNOnshapeImpCS.dll或者它依赖的其他库)在尝试调用6.0.0.0版本的Newtonsoft.Json。下面是几个你可以尝试的解决方案,按优先级排序:
1. 添加程序集绑定重定向
这是解决版本冲突最常用的方法,告诉CLR用你项目里的10.0.3版本替代旧版本的请求。
- 打开主项目的
app.config(Web项目则是Web.config),在<configuration>节点下插入以下配置:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-10.0.3.0" newVersion="10.0.3.0" /> </dependentAssembly> </assemblyBinding> </runtime>
- 注意:Newtonsoft.Json的
publicKeyToken是固定的30ad4fe6b2a6aeed,确保newVersion和你实际引用的版本完全一致。
2. 排查间接依赖的NuGet包
有可能是项目里的其他NuGet包间接引用了6.0.0.0版本的Newtonsoft.Json,引发冲突。
- 在Visual Studio中打开工具 > NuGet包管理器 > 程序包管理器控制台,运行以下命令查看项目中所有直接/间接引用的Newtonsoft.Json版本:
Get-Package -ProjectName 你的项目名称 -IncludePrerelease | Where-Object {$_.Id -eq "Newtonsoft.Json"}
- 如果发现旧版本依赖,可尝试强制统一版本:
Install-Package Newtonsoft.Json -Version 10.0.3 -ProjectName 你的项目名称 -Force
3. 检查全局程序集缓存(GAC)
GAC中若存在旧版本的Newtonsoft.Json,CLR会优先加载它。
- 以管理员身份打开命令提示符,运行命令查看GAC中的相关版本:
gacutil /l Newtonsoft.Json
- 如果输出包含6.0.0.0版本,可执行以下命令卸载(注意:确保其他项目不依赖该版本):
gacutil /u Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
4. 清理并重建整个解决方案
项目输出目录残留的旧版本DLL也可能导致冲突:
- 在Visual Studio中点击生成 > 清理解决方案
- 手动删除每个项目的
bin和obj文件夹 - 重新生成整个解决方案
5. 检查SNOnshapeImpCS.dll的依赖
既然错误来自这个DLL,你可以用工具查看它的依赖项:
- 使用Visual Studio自带的ILSpy或dotPeek打开
SNOnshapeImpCS.dll,查看它引用的Newtonsoft.Json版本。 - 如果它确实硬编码了6.0.0.0的引用,且无法更新该DLL,那绑定重定向(方案1)就是唯一可行的解决办法,务必确保配置正确。
如果以上方法都无效,你可以在Visual Studio的输出窗口(设置为“显示所有输出”)查看程序集加载的详细日志,定位到底是哪个组件在请求6.0.0.0版本,以便精准排查。
内容的提问来源于stack exchange,提问作者Nikhil Ruikar
相关产品推荐
相关产品推荐

