【问题标题】:How to bypass nuget version restrictions如何绕过nuget版本限制
【发布时间】:2016-09-08 01:24:06
【问题描述】:

我正在编写一个 Asp.Net 5 (MVC6) web api,并添加了依赖于 Newtonsoft.Json v4.5.0.0 的 nuget 包“SharpMap”,但装配了 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=30ad4fe6b2a6aeed' 它具有比引用的程序集“Newtonsoft.Json”更高的版本 身份为 'Newtonsoft.Json,版本 = 4.5.0.0,文化 = 中性, PublicKeyToken=30ad4fe6b2a6aeed'

关于如何绕过 nuget 包的版本限制的任何想法?或者针对这个特定问题的任何其他解决方案?

【问题讨论】:

    标签: .net nuget


    【解决方案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 或更高版本)。

    【讨论】:

    • 我最终创建了一个新的解决方案并移植了相关代码。我还下载了最新的源代码并编译它们以更改 newtonsoft 参考版本。但是您的解决方案确实有效。我会联系 SharpMap 发布者,因为 nuget 上发布的版本是 3 年前的,但来源只有 3 个月大。
    猜你喜欢
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    相关资源
    最近更新 更多