2012-12-14 67 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」 –