如何绕过nuget版本限制



我正在编写一个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或更高版本)。

最新更新