2014-02-19 14 views
19

Ich habe die folgenden Fehler auf meinem Build-Server (TFS/Visual Studio Online) vorkommen: für diese BaugruppeAssembly-Referenz kann nicht aufgelöst werden - dependentAssembly-Problem?

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. 

Hier ist der web.configdependentAssembly Eintrag in meinem Api.dll Projekt:

<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> 

die aktuelle Version des Json.NET NuGet-Paket installiert ist 6.0.1:

enter image description here

Wenn in den Projektreferenzen suchen, ich habe die Newtonsoft.Json als 6.0.0.0:

enter image description here

Die Version von System.Net.Http.Formatting in Referenzen 5.1.0.0 ist.

NuGet Wiederherstellung ist in der Build-Definition aktiviert und ich habe diese Fehler nicht auf meiner lokalen Kopie, nur in TFS.

Ist jemand in der Lage zu erkennen, was das Problem sein könnte?

Ich denke, es könnte aufgrund der dependentAssembly Eintrag sein, aber ich kann es nicht zum Laufen bringen.

+0

Um verbindliche Fehler zu diagnostizieren, verwenden Sie bitte den Fusion Viewer: http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx. – Polyfun

Antwort

13

Das Problem war etwas unerwartetes.

Das Update war die folgende Zeile in der Projektdatei unter jedem relevanten <PropertyGroup> Abschnitt enthalten:

<CodeAnalysisAdditionalOptions>/assemblyCompareMode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions> 

die Projektdatei zu bearbeiten, klicken Sie rechts auf das Projekt und klicken Sie auf Unload Projekt. Nun klicken Sie rechts auf die unbelastete Projekt und wählen bearbeiten MyProject.csproj

+2

Ich habe das gleiche Problem auf unserem Testserver, aber es funktioniert gut auf meinem Dev-Rechner und die .. funktioniert nicht für mich. Habe auch StrongNameIgnoringVersion versucht aber kein Glück. Das hat mich Tage gekostet. Irgendwelche anderen Ideen? – CRG

+1

Das hat meinen Tag gerettet. Es ist der Weg zu gehen, wenn Sie Code-Analyse 'Konfiguration nicht direkt ändern können (in Corporate Build-Servern ist es in der Regel so) – SuperJMN

15

Wenn Sie Ihre Projektdateien, Paketdateien geschrubbt haben, und Referenzen und alle Versionen sind die richtige und aktuellste Version von Newtonsoft, könnte es sein, eine .Net DLL mit einer Abhängigkeit zu einer früheren Version von Newtonsoft.Json. In meinem Fall war es System.Net.Http.Formatting, Version = 4.0.0.0:

enter image description here

Versuchen das Hinzufügen der folgenden auf die * .config des Aufruf Projekt:

<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> 

Beim Ausführen eines Testprojekts für das WebAPI-Projekt wurde eine FileNotFound-Ausnahme von der WebAPI aufgrund eines Versionskonflikts von Newtonsoft.Json zwischen 4.5.0.0 und 6.0.1.0 ausgelöst. Das Problem wurde behoben, indem Sie die Anweisung zu app.config des aufrufenden Testprojekts hinzufügten.

+0

"Hinzufügen der Anweisung in die app.config des aufrufenden Test-Projekts behoben das Problem." das löste mein Problem vollständig. In dem Projekt, das System.Net.Http.Formatting Redirect verwendet wurde bereits eingestellt, aber es war nicht genug. Jedes andere Projekt, das das Projekt aufruft, muss ebenfalls diese Umleitung haben. –

2

in meinem Fall die Newtonsoft.Json bindingredirect funktionierte nicht, weil irgendwie die root web.config Datei nicht Teil der bereitgestellten Dateien war.

Überprüfen Sie die Eigenschaften Ihrer Datei web.config. In unserem Fall wurde der Wert "Build Action" auf "None" gesetzt.Es sollte auf "Inhalt" festgelegt werden, um Teil der bereitgestellten Dateien auf dem Server zu sein.

Außerdem wird erläutert, warum die Website am (lokalen) IISexpress arbeitete, aber nicht an der vollständigen IIS-Instanz.

Verwandte Themen