我尝试在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
无论如何都有解决这个问题的方法吗?提前谢谢。
答案 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与旧版本编译的库往往工作正常,所以值得一试。