如何绕过nuget版本限制

时间:2016-05-12 09:39:18

标签: .net 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,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包的版本限制的任何想法?或针对此特定问题的任何其他解决方案?

1 个答案:

答案 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或更高版本)。