棘手的装配版本不兼容

时间:2015-10-21 08:17:49

标签: c# json.net sharpmap

我最近将SharpMap添加到我的一个项目中。然后,同一解决方案中的另一个项目会抛出这个:

An exception of type 'System.IO.FileLoadException' occurred in mscorlib.dll but was not handled in user code

Additional information: Could not load file or assembly 'Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我搜索解决方案并发现: Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'

但事实上它并没有解决问题:

Update-Package : Unable to resolve dependencies. 'Newtonsoft.Json 7.0.1' is not compatible with 'SharpMap 1.1.0 constraint: Newtonsoft.Json (= 4.5.11)'.
At line:1 char:16
+  Update-Package <<<<  Newtonsoft.Json
    + CategoryInfo          : NotSpecified: (:) [Update-Package], Exception
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.UpdatePackageCommand

更多关于可能与问题相关的项目结构:

&#34;项目A&#34;是使用SharpMap的启动项目。 &#34;项目B&#34;是失败的,&#34;项目A&#34;参考文献&#34;项目B&#34;。

2 个答案:

答案 0 :(得分:1)

您需要添加对特定版本的程序集Newtonsoft.Json的引用,并且所需的版本是4.5.11。您添加的版本是7.0。

答案 1 :(得分:1)

由于SharpMap 1.1.0.0依赖于Newtonsoft.Json版本4.5.11,您应该使用Packet Manager控制台和以下命令更新项目

Update-Package Newtonsoft.Json -version 4.5.11

这将卸载当前版本的Newtonsoft.Json并将安装(旧)版本4.5.11

另一种解决方法是使用程序集版本重定向,方法是将以下内容添加到app.config

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

但是,只有在您确定SharpMap 1.1.0.0能够使用新版本的Newtonsoft.Json

时,才应该使用它。