Aspx应用Ajax调用WebMethod时Newtonsoft.Json程序集加载失败求助
这种版本不匹配的坑我踩过好多次,光卸载重装NuGet包确实不一定能搞定,试试下面这几个步骤,大概率能解决:
检查并添加绑定重定向
打开项目的web.config文件,找到configuration节点下的runtime→assemblyBinding(如果没有就手动创建),添加针对Newtonsoft.Json的版本重定向规则,把所有旧版本请求都指向你当前安装的版本。比如你现在装的是13.0.0.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="13.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>注意把
newVersion改成你实际安装的版本号。确认项目引用的版本正确性
右键你的ASPX项目→选择「引用」,找到Newtonsoft.Json,右键查看「属性」,确认「版本」字段和你NuGet包安装的版本一致。如果不一致,先删除这个引用,然后重新通过NuGet安装对应版本的包。清理缓存并重启VS
先点击菜单栏的「生成」→「清理解决方案」,然后手动删除项目目录下的bin和obj文件夹,接着重启Visual Studio,再重新生成项目。这一步能清除残留的旧版本dll缓存,很多时候就是缓存搞的鬼。检查发布环境的dll版本
如果是发布到服务器后出现的问题,登录服务器找到应用的bin文件夹,查看Newtonsoft.Json.dll的版本号(右键→属性→详细信息),如果和你本地项目的版本不一致,手动替换成正确版本的dll文件,同时确保服务器上没有其他地方残留旧版本的dll。统一解决方案内的包版本
如果你的解决方案里有多个项目,要确保所有项目都安装了相同版本的Newtonsoft.Json NuGet包。可以右键解决方案→「管理NuGet程序包」,在「已安装」标签下统一更新所有项目的版本,避免跨项目引用导致的版本冲突。
内容的提问来源于stack exchange,提问作者elunap

