使用2013 Pro:
下面是一个使用NuGet包的网站项目(而不是应用程序)的一个小难题:
包A取决于包Newtonsoft.Json
我安装了软件包A,它反过来安装它的依赖项: Newtonsoft.Json版本6.0.0
我测试我的网页,一切都很好,…
在Visual中,我执行以下操作:
Tools -> NuGet Package Manager ->管理解决方案…的NuGet包
单击“更新”,包管理器将显示Newtonsoft.Json的更新(到8.0.2版)。
当然,想要得到最新和最好的,我点击“更新”。
Newtonsoft.Json被下载并更新到8.0.2版
我再次测试我的网页,然后看到…
例外情况: System.IO.FileLoadException:无法加载文件或程序集“Newtonsoft.Json、Version=6.0.0.0、Culture=neutral、PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项之一。所定位的程序集的清单定义与程序集引用不匹配。( HRESULT: 0x80131040除外)文件名:'Newtonsoft.Json,Version=6.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed‘
所以我的问题是:如何解决这个问题?…
我唯一能做到的就是(到目前为止),删除所有的软件包,重新安装软件包A,因为它需要6.0.0版的Newtonsoft.Json。
但是,如果我使用另一个NuGet包(比方说,包B),它依赖于不同版本的Newtonsoft.Json,该怎么办?换句话说,如果我使用任何其他具有相同依赖关系但版本不同的NuGet包,那么使用不存在特定依赖版本的包的页面最终会引发异常。
有没有办法绕过这种情况--或者如果我有多个依赖于Newtonsoft.Json的包--所有包都必须依赖同一个版本吗?
希望我说得够清楚了,谢谢。
发布于 2016-01-22 00:32:17
如果更新是向后兼容的,则可以使用BindingRedirect:
<dependentAssembly>
<assemblyIdentity name="someAssembly" publicKeyToken="32ab4ba45e0a69a1" culture="en-us" />
<bindingRedirect oldVersion="6.0.0.0" newVersion="8.0.2.0" />
</dependentAssembly>这显然只适用于向后兼容的升级,如果API发生变化,您就有麻烦了。有关BindingRedirects的更多信息可以在这里找到:
https://msdn.microsoft.com/en-us/library/7wd6ex19(v=vs.110).aspx
发布于 2016-01-22 02:59:32
这是一个常见的问题,就像肯尼斯说的,如果它支持向后兼容性,它应该与"bindingRedirect“一起工作。
“我唯一能做到的方法就是(到目前为止),移除所有软件包并重新安装软件包.”
对于要更新Nuget而不删除dll的问题,可以安装Nuget的特定版本。
VS -> Tools -> Nuget Package Manager -> Package Manager控制台并运行以下命令
安装-软件包Newtonsoft.Json -Version 6.0.1
您可以在此页面中看到Newtonsoft版本的历史记录,并选择所需的版本。
这将降低/升级现有的软件包。
https://stackoverflow.com/questions/34936945
复制相似问题