2016-07-05 6 views
2

Dieser eine Fehler macht mich verrückt.Datei oder Baugruppe konnte nicht geladen werden 'Newtonsoft.Json, Version = 7.0.0.0, Culture = Neutral, PublicKeyToken = 30ad4fe6b2a6aeed' oder eine seiner Abhängigkeiten

Ich installierte die SendGrid NuGet Paket in einer meiner Klassenbibliotheken namens BaseServices, die eine Abhängigkeit von Newtonsoft.Json v7.0.1 hat, so ist es, dass das in meinem Pakete Ordner und Verweise installiert.

In der Klassenbibliothek, ich diese Bindung Umleitung haben:

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

In der web.config der Anwendung ASP.NET MVC, dh die Client-Anwendung, die meine Klassenbibliothek verwendet, habe ich eine Assembly Bindung Umleitung für Versionen kleiner als v6 v6 der Newtonsoft.Json Bibliothek zu zeigen, wie so:

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

Wenn ich meinen E-Mail zu senden Code ausführen, der in dem BaseServices ist Bibliothek, bekomme ich diesen Fehler:

The thread 0x1a4c has exited with code 0 (0x0). System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) File name: 'Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' at SendGrid.Helpers.Mail.Mail.Get() at BaseServices.EmailService.SendAsync(EmailMessage message) in MyFolder\BaseServices\EmailService.cs:line 39

=== Pre-bind state information === LOG: DisplayName = Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed (Fully-specified) LOG: Appbase = file:///MyFolder/Web/ LOG: Initial PrivatePath = MyFolder\Web\bin Calling assembly : SendGrid, Version=7.0.3.0, Culture=neutral, PublicKeyToken=4f047e93159395ca. === LOG: This bind starts in default load context. LOG: Using application configuration file: MyFolder\Web\web.config LOG: Using host configuration file: C:\Users\computer\Documents\IISExpress\config\aspnet.config LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. LOG: Post-policy reference: Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed LOG: Attempting download of new URL file:///C:/Users/computer/AppData/Local/Temp/Temporary ASP.NET Files/root/ef9cacdf/e639667a/Newtonsoft.Json.DLL. LOG: Attempting download of new URL file:///C:/Users/computer/AppData/Local/Temp/Temporary ASP.NET Files/root/ef9cacdf/e639667a/Newtonsoft.Json/Newtonsoft.Json.DLL. LOG: Attempting download of new URL file:///MyFolder/Web/bin/Newtonsoft.Json.DLL. WRN: Comparing the assembly name resulted in the mismatch: Major Version ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

Antwort

7

Sie haben 2 verschiedene Versionen der JSON.NET-Bibliothek in Ihrer Lösung. Um dies zu beheben, sollten Sie sie auf die neueste Version aktualisieren. Gehen Sie folgendermaßen vor:

  1. Offene Lösung Explorer
  2. Rechtsklick auf Lösungsnamen
  3. Wählen Sie Verwalten Nuget Pakete für Lösung
  4. Wählen Sie Updates aus dem Menü
  5. aktualisieren JSON.NET Paket

Dies wird Ihr Problem beheben.

1

Ich hatte diese Verrücktheit mir ziemlich oft passieren. Sie müssen sicherstellen, dass die Newtonsoft.Json Montageversion in diesen Orten konsistent ist:

  • Projektreferenzen (dll-Version)
  • Web.config
  • Packages.config