使用NuGet安装软件包时出现依赖关系错误

时间:2014-03-22 14:21:17

标签: nuget tweetsharp sharpmap

我尝试在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 个答案:

答案 0 :(得分:4)

问题在于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与旧版本编译的库往往工作正常,所以值得一试。