当解决方案的项目多到一定的程度的时候,在 dll 的引用管理上难免有疏忽,最近由于Newsoft.Json 的引用冲突挠破了头皮。项目报错如下:
这种错误很常见,一般是程序引用了不匹配的版本所致的,删除掉原来的引用,重新引用解决方案下对应版本的 dll 即可解决,但是这次情况特殊,并不是引用错误,而是引用冲突:新项目中引用了两个不同的老项目生成的 dll 但是老项目中分别用了不同版本的 Newsoft.Json 不管引用哪个版本的 Newsoft.Json 程序总会报错。
解决办法如下:
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-4.0.3.0" newVersion="4.5.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
就强制使用版本4.5.0.0 的Newsoft.Json 了,这样就不会出现上述错误。
出现上述错误主要有以下几种原因:
第一,引用不存在vs自动找到旧版的。
第二,web.config配置的版本号跟实际想要版本号不对。
第三,bin文件夹里面的根本就是旧版的。
第四,本文中描述的这种。
使用这种解决方法也可以解决其他 dll 版本冲突,不过这要求有一个大前提:高版本的dll兼容低版本的dll。
参考:
http://www.lxway.com/48528444.htm
http://www.lxway.com/488185852.htm