我正在编写一个Asp.Net 5(MVC6)web api,我添加了nuget包"SharpMap",它依赖于Newtonsoft.Json v4.5.0.0,但组件Mvc.Asp.Net.Mv.ViewFeatures需要Newtonsoft.Json v6.0.0.0。
如果我将Newtonsoft.Json更新到v6或更高版本,我会收到以下错误:
具有标识的程序集"Microsoft.AspNet.Mvc.ViewFeatures"'Microsoft.AspNet.Mvc.ViewFeatures,版本=6.0.0.0,区域性=中性,PublicKeyToken=adb9793829ddae60"使用"Newtonsoft.Json,版本=6.0.0.0,区域性=中性,PublicKeyToken=30ad4fe6b2a6eed'其版本高于引用的程序集"Newtonsoft.Json"身份为Newtonsoft.Json,版本=4.5.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6eed‘
关于如何绕过nuget包的版本限制,有什么想法吗?或者这个特殊问题的其他解决方案?
您可以在安装过程中使用-IgnoreDependencies标志,让NuGet自己安装包,而不用担心依赖关系冲突。在这种情况下,听起来你想卸载SharpMap,安装其他所有东西(包括Json.NET6),然后运行:
Install-Package SharpMap -IgnoreDependencies
然后,我们必须让.NET在运行时不抱怨版本冲突。这可以通过向web.config/app.config文件添加绑定重定向来完成:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NewtonSoft.Json" />
<bindingRedirect oldVersion="4.0.0.0-6.0.0.0"
newVersion="6.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
这告诉运行时将加载Json.NET 4-6的请求重定向到加载Json.NET6。注意,这里使用的版本是.NET程序集版本,与NuGet包版本不同!
然而,对于像SharpMap这样的包来说,在NewtonSoft.Json这样的通用第三方库上绑定严格的版本是很奇怪的。考虑要求维护人员提供一个对该依赖关系只有下限的版本(例如4.5.11或更高版本)。