ASP.Net项目更新NuGet包后程序集加载失败求助
解决Newtonsoft.Json版本冲突引发的文件未找到异常
这种情况我在日常排查问题时碰到过不少,核心原因就是间接依赖的版本不匹配,或者程序集绑定重定向没配置到位,导致CLR找不到对应的版本。给你几个针对性的解决步骤:
1. 配置程序集绑定重定向,强制CLR使用当前安装的版本
这是最常见的解决办法,因为有些依赖包会偷偷引用旧版本的Newtonsoft.Json,我们需要明确告诉CLR用你现在安装的版本替代所有旧版本:
- 打开项目的
web.config(Web项目)或app.config(类库项目),找到<runtime>节点(如果没有就自己加一个) - 添加如下配置,注意把
newVersion改成你当前实际安装的Newtonsoft.Json版本号(比如你装的是13.0.1,就写13.0.1.0):
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="你的实际版本号" /> </dependentAssembly> </assemblyBinding> </runtime>
这里的oldVersion范围要覆盖所有可能被引用的旧版本(比如你遇到的6.0.0.0、10.0.0.0),确保所有请求都会被导向你安装的版本。
2. 检查所有子项目的NuGet依赖一致性
- 右键解决方案,选择「管理解决方案的NuGet程序包」,切换到「已安装」标签,逐个查看每个子项目里Newtonsoft.Json的版本。如果有子项目还停留在旧版本,要么统一升级到新版本,要么确保绑定重定向覆盖那个版本。
- 也可以用包管理器控制台排查间接依赖:打开VS的「工具」->「NuGet包管理器」->「包管理器控制台」,运行
Get-Package -ProjectName 你的子项目名称,看看有没有第三方包依赖了旧版本的Newtonsoft.Json。
3. 深层清理缓存与编译输出
你之前做过基础清理,但可能还有残留的旧文件:
- 完全关闭VS,手动删除每个项目下的
bin和obj文件夹(这些是编译缓存,经常会残留旧dll) - 删除
%USERPROFILE%\.nuget\packages目录下的Newtonsoft.Json文件夹,彻底清除本地缓存的所有版本 - 重新打开VS,右键解决方案选择「还原NuGet包」,接着「清理解决方案」,最后「重新生成解决方案」
4. 排查第三方包的兼容性
有些老的第三方NuGet包会硬绑定特定版本的Newtonsoft.Json,如果你更新了Newtonsoft.Json,这些包就会报错:
- 查看那些可疑第三方包的文档,确认它们支持的Newtonsoft.Json版本范围
- 如果某个包确实只支持旧版本,要么回滚Newtonsoft.Json到该包兼容的版本,要么寻找该包的更新版本,看是否已经适配了新版本的Newtonsoft.Json
内容的提问来源于stack exchange,提问作者user2088807
相关产品推荐
相关产品推荐

