2012-02-24 154 views
8

「無法加載文件或程序集‘Newtonsoft.Json,版本= 4.0.3.0, 文化=中性公鑰= 30ad4fe6b2a6aeed’或它 的一個依賴。找到的程序集的清單定義不符合程序集引用的 。 (來自HRESULT的異常:0x80131040)「。無法加載文件或組件Newtonsoft.json.dll

'NewtonsoftJson.dll'程序集是發佈到twitter所必需的。使用的版本是4.0.3.0。

通過facebook C#api(dll)將相同的程序集(但diff版本4.0.0.0)用作相關程序集。然而,上述程序集(4.0.3.0)不適用於這兩種情況(例如,發佈到twitter和登錄到facebook)。爲了解決這個問題,創建了一個單獨的項目發佈到twitter並單獨引用程序集(4.0.3.0)(在twitter發佈的項目中)。另一個版本(4.0.0.0)被添加爲主要項目的參考facebook但仍然出現錯誤。如果twitter項目被禁用並且運行,那麼Facebook登錄工作正常,並且副作用。

我已經做了大量的研究並嘗試了以下內容。

刪除臨時文件asp.net清潔 解決 重啓計算機

即使試圖卸載從GAC大會(但它不是那裏註冊)。

請幫助我,因爲它不工作。 謝謝, S

回答

8

目前尚不清楚什麼是項目之間的關係,或者當這個錯誤發生時,但這裏有一個猜測。

您有3個項目的facebook項目(參考4.0.0.0版本),twitter項目(參考4.0.3.0版本),和一個主要項目,參考這兩個項目。您可能能夠構建此解決方案,但是當您運行程序集綁定將會失敗。爲什麼?因爲默認行爲是在運行之前在本地複製程序集。會發生什麼是第一個項目建立複製到斌(說twitter),然後第二個項目建立(臉譜),然後主要。然而,在這個4.0.0.0版本的最後,我們正在使用bin文件夾。當你運行時,只要你從twitter中調用一些試圖使用問題程序集的東西,綁定就會失敗,因爲它可以訪問程序集的4.0.3.0版本。

有幾種解決方法。一個是在GAC中註冊這兩個程序集。如果這不可行,那麼在你的配置文件中查看assembly binding redirection。另一種方法是註冊AssemblyResolve event並以編程方式加載程序集。

+0

請對http://stackoverflow.com/questions/22490967/visual-studio-keeps-overwriting-newtonsoft-json-dll-with-an-older-version 看看builing一個項目,變化Newtonsoft.json.dll版本在另一個! – nsb 2014-07-11 23:29:27

8

以下添加到您的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-4.5.0.0" newVersion="4.5.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

<configuration></configuration>標籤內

0

在所有項目安裝包Newtonsoft。

Install-Package Newtonsoft.Json -Version 8.0.3