我正在编写一个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,Version = 6.0.0.0,Culture = neutral, 公钥= adb9793829ddae60'使用' Newtonsoft.Json, Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed' 它的版本高于引用的汇编版本' Newtonsoft.Json' with identity' Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral, 公钥= 30ad4fe6b2a6aeed'
关于如何绕过nuget包的版本限制的任何想法?或针对此特定问题的任何其他解决方案?
答案 0 :(得分:1)
您可以在安装期间使用-IgnoreDependencies标志来使NuGet本身安装包而不必担心依赖冲突。在这种情况下,听起来你想要卸载SharpMap,安装其他所有东西(包括Json.NET 6),然后运行:
Install-Package SharpMap -IgnoreDependencies
然后,我们必须让.NET不要在运行时抱怨冲突的版本。这可以通过在web.config / app.config文件中添加binding redirect来完成:
<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.NET 6.请注意,此处使用的版本是.NET程序集版本,与NuGet程序包版本不同!
然而,像SharpMap这样的软件包在NewtonSoft.Json这样的常见第三方库上绑定严格的版本却很奇怪。考虑让维护者提供一个只有该依赖关系下限的版本(例如4.5.11或更高版本)。