5

更新 Newtonsoft.Json 后,我们遇到了程序集冲突。我无法理解错误中引用的特定版本来自何处。web.config 中没有任何内容指向特定版本。

System.IO.FileLoadException:无法加载文件或程序集“Newtonsoft.Json,Version=3.5.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

GAC-ing 两个版本的程序集可以解决这个问题吗?

4

2 回答 2

17

正如@jammykam在marto 的回答中评论的那样,您可以重定向程序集。过去我用 Newtonsoft 和 Sitecore 做过这件事,没有任何问题。您可以查看我的Sitecore 内容即服务代码,我可以在其中运行它。

您对 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>
于 2013-01-03T14:11:41.850 回答
3

GAC 可能会奏效,但会造成维护噩梦。不要这样做!

我认为你有两个选择:

  1. 使用 Sitecore 附带的版本,这取决于您运行的 Sitecore 版本。
  2. 保持一个 sitecore 版本不变,并使用 ilmerge 将您需要的 Newtonsoft.Json 版本与您自己的程序集结合起来。

如果您不需要库的任何最新功能(例如(动态...等)),我会推荐 1

于 2012-12-14T14:04:12.483 回答