代码之家  ›  专栏  ›  技术社区  ›  Aboud Zakaria

使用NuGet安装程序包时出现依赖项错误

  •  1
  • Aboud Zakaria  · 技术社区  · 10 年前

    我正在尝试在Visual Studio 2010上使用NuGet安装以下软件包

    • TweetSharp版本2.3.1(需要Newtonsoft.Json版本5.0.6)

    • SharpMap 1.1.0版(需要Newtonsoft.Json 4.5.11版)

    使用以下简单的NuGet命令:

    PM> Install-Package TweetSharp
    PM> Install-Package SharpMap
    

    但是,在安装第二个包后,我遇到了以下依赖项错误:

    Install failed. Rolling back...
    Install-Package : Updating 'Newtonsoft.Json 5.0.6' to 'Newtonsoft.Json 4.5.11' failed. Unable to find a version of 'TweetSharp' that is compatible with 'Newtonsoft.Json 4.5.11'.
    At line:1 char:16
    + Install-Package <<<<  SharpMap
        + CategoryInfo          : NotSpecified: (:) [Install-Package], InvalidOperationException
        + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand
    

    有办法解决这个问题吗?提前感谢。

    1 回复  |  直到 10 年前
        1
  •  4
  •   Mark Seemann    10 年前

    问题是SharpMap将依赖项定义为 确切地

    NewtonSoft.Json=4.5.11

    不大于或等于,但 完全相等 。最好的办法是联系包裹的所有者,要求他们放宽要求。它不像现在这样有用,这正是这个问题所证明的原因。

    但是,您可以尝试使用 -IgnoreDependencies 开关:

    > Install-Package SharpMap -IgnoreDependencies
    

    这将安装 只有 SharpMap,因此之后您需要显式安装所有其他依赖项(NewtonSoft.Json除外):

    > Install-Package BruTile -Version 0.7.4.4
    > Install-Package Common.Logging -Version 2.0.0
    > Install-Package GeoAPI -Version 1.7.2
    > Install-Package NetTopologySuite -Version 1.13.2
    > Install-Package NetTopologySuite.IO -Version 1.13.2
    > Install-Package ProjNET4GeoAPI -Version 1.3.0.3
    

    然而,SharpMap仍将查找NewtonSoft.Json 4.5.11,因此您需要在应用程序配置文件中添加程序集绑定重定向:

    <configuration>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json"
                              publicKeyToken="30ad4fe6b2a6aeed"
                              culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.0.6.0"
                             newVersion="5.0.6.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    

    也许 工作,但我还没有尝试,因为最终,这取决于您想如何一起使用这两个库。

    Json.NET主要版本的变化表明4.x和5.0之间存在重大变化,因此如果SharpMap依赖于Json.NET 4.5.11中受重大变化影响的某些功能,它将无法工作。

    然而,根据我的经验,使用较新版本的Json.NET以及针对较旧版本编译的库通常效果良好,因此值得一试。