2014-02-19 55 views
19

我已經出現我的生成服務器上的以下錯誤(TFS/Visual Studio的在線):程序集引用無法解析 - dependentAssembly問題?

CA0055 : Could not load C:\a\Binaries\Api.dll. The following error was encountered while reading module 'System.Net.Http.Formatting': Assembly reference cannot be resolved: Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed. 
CA0058 : The referenced assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' could not be found. This assembly is required for analysis and was referenced by: C:\a\Binaries\Api.dll, C:\a\Sources\MyLocation\packages\Microsoft.AspNet.WebApi.Client.5.1.1\lib\net45\System.Net.Http.Formatting.dll. 

這裏是我的Api.dll項目本次大會的web.configdependentAssembly項:

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

已安裝的Json.NET NuGet包的實際版本爲6.0.1:

enter image description here

當項目引用看,我有Newtonsoft.Json爲6.0.0.0:

enter image description here

System.Net.Http.Formatting中引用的版本是5.1.0.0。

在構建定義中啓用了NuGet還原,並且我的本地副本上沒有這些錯誤,僅在TFS中。

是否有人能夠發現可能存在的問題?

我認爲這可能是由於dependentAssembly條目,但我無法讓它工作。

+0

要診斷綁定錯誤,請使用Fusion Viewer:http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx。 – Polyfun

回答

13

這個問題出乎意料。

此修復程序是包含在每個相關<PropertyGroup>節中的項目文件中的以下行:

<CodeAnalysisAdditionalOptions>/assemblyCompareMode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions> 

要編輯的項目文件,右鍵單擊該項目,並單擊卸載項目。現在,右鍵點擊卸載項目並選擇編輯MyProject.csproj

+2

我在我們的測試服務器上遇到了同樣的問題,但它在我的開發機器上正常工作,並且 .. 不適用於我。還嘗試過StrongNameIgnoringVersion,但沒有運氣。這花了我幾天的時間。任何其他想法? – CRG

+1

這節省了我的一天。當你無法直接修改代碼分析的配置時(這在公司的構建服務器中通常是這樣) – SuperJMN

15

如果你已經擦洗你的項目文件,包文件,並引用和所有版本都Newtonsoft的正確的和最新的版本,它可能是一個淨與一個早期版本的Newtonsoft.Json的依賴關係。在我的情況下,它是System.Net.Http.Formatting,版本= 4.0.0.0:

enter image description here

嘗試添加下列到的的* .config調用項目:

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

當針對WebAPI項目運行測試項目時,由於Newtonsoft.Json版本與4.5.0.0和6.0.1.0之間的版本不匹配,WebAPI正在拋出FileNotFound異常。將該語句添加到的調試測試項目的app.config中修復了該問題。

+0

「將語句添加到調用測試項目的app.config中解決了問題。」 這完全解決了我的問題。在使用System.Net.Http.Formatting的項目中,重定向已經被設置,但還不夠。 調用該項目的每個其他項目也必須具有此重定向。 –

2

在我的情況下,Newtonsoft.Json bindingredirect不工作,因爲某種方式根web.config文件不是部署文件的一部分。

檢查web.config文件的屬性。我的情況是,「Build Action」值設置爲「None」。它應該設置爲「內容」作爲部署到服務器的文件的一部分。

也解釋了爲什麼網站正在使用(本地)IISexpress而不是完整的IIS實例。

相關問題