2012-12-14 116 views
5

我们在更新Newtonsoft.Json后收到程序集冲突。我无法理解错误中引用的特定版本来自哪里。 web.config中没有指向特定版本的内容。Newtonsoft.Json中的程序集冲突

System.IO.FileLoadException:无法加载文件或组件 'Newtonsoft.Json,版本= 3.5.0.0,文化=中性 公钥= 30ad4fe6b2a6aeed' 或它的一个依赖。位于程序集清单定义中的 与程序集 的引用不匹配。 (异常来自HRESULT:0x80131040)

会GAC-ING组装工作的两个版本来解决这个问题?

回答

3

GACing他们可能会工作,但它会造成维修的噩梦。不要这样做!

我觉得你有2种选择:

  1. 使用随Sitecore的附带的版本上Sitecore的版本正在运行的依赖。
  2. 保持一个sitecore版本不变,并使用ilmerge将您需要的Newtonsoft.Json版本与您自己的程序集结合在一起。

我建议1,如果你不需要任何的最近像图书馆的功能(动态...等)

+0

是没可能重定向程序集版本?我不知道它会对Sitecore有什么影响(如果有的话),但... http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx – jammykam

+0

你可以尝试,但两个版本的程序集都需要拥有相同的公共令牌。我不确定是这种情况。此外,您需要考虑使用旧版本和更新版本的Json.net测试sitecore时发生的变化,以便您可以通过将程序集重定向为@jammykam提到的方式来破解某些内容。 – marto

17

@jammykam commented在marto的回答,您可以重定向程序集。过去我使用Newtonsoft和Sitecore完成了这个工作,没有出现任何问题。你可以看看我的工作地点Sitecore Content as Service code

你是在web.config文件中这些行特别感兴趣: https://github.com/HedgehogDevelopment/sitecore-content-service/blob/master/Sitecore/Web/Web.config#L3499

<dependentAssembly> 
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.0.8.0" newVersion="4.5.0.0" /> 
</dependentAssembly> 
+0

这节省了我的下午,谢谢! –

+0

谢谢@ Sean-Kearney。你的web.config文件救了我们从地狱。 – Ben

+0

显然这与此相反,如果你需要降级,在我的情况下... oldVersion =“0.0.0.0-6.0.0.0”newVersion =“4.5.0.0” –