it-swarm.com.de

Newtonsoft.json Nicht übereinstimmende Version des Assemblypakets

Ich versuche, SocketIO4Net zu verwenden, um den socket.io-Client in .net zu erstellen. Itseems SocketIO4Net hat eine Abhängigkeit von Newtonsoft.Json> = 4.0.8. Ich verwende auch die PushSharp Bibliothek, die eine Newtonsoft.Json-Abhängigkeit von> = 4.5.10 hat. Ich habe NewtonSoft.Json 4.5.11 erhalten, als ich PushSharp zum ersten Mal installierte. Ich dachte, diese Version sollte SocketIO4Net ebenfalls unterstützen, da es eine höhere Version ist. Ich erhalte jedoch diese Fehlermeldung, wenn versucht wird, eine Verbindung zum socket.io-Server herzustellen.

Datei oder Assembly 'Newtonsoft.Json, Version = 4.0.8.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Die Manifestdefinition der gefundenen Assembly stimmt nicht mit der Assemblyreferenz überein. (Ausnahme von HRESULT: 0x80131040)

Ich habe mir den ganzen Tag mit diesen Abhängigkeitsproblemen den Kopf geschlagen. Ich wäre sehr dankbar, wenn mich jemand in die richtige Richtung weisen könnte.

21
Bitsian

Lösung gefunden, probiere es mit: 

<runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
        <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>
    </assemblyBinding>
</runtime>
18
ZeroDotNet

Sie können die Assembly-Bindekonfiguration ändern und eine Umleitung hinzufügen. Siehe Assemblyversionen umleiten in MSDN.

Grundsätzlich möchten Sie Ihrer app.config- oder web.config-Datei folgendes Snippet hinzufügen:

<configuration>
   <runtime>
     <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="Newtonsoft.Json"
                           publicKeyToken="30ad4fe6b2a6aeed"
                           culture="neutral" />
         <!-- 
           Assembly versions can be redirected in application, 
           publisher policy, or machine configuration files.
         -->
         <bindingRedirect oldVersion="1.0.0.0-4.5.11.0" newVersion="4.5.11.0"/>
       </dependentAssembly>
     </assemblyBinding>
   </runtime>
</configuration>

EDIT

Warum müssen Sie Assembly-Versionen umleiten? Obwohl SocketIO4Net neuere Versionen von Newtonsoft.Json unterstützt, wurde es mit einer einzigen Version (in Ihrem Fall 4.0.8) kompiliert. Diese Version ist in der DLL gespeichert und wird zum Laden von DLLs verwendet, von denen SocketIO4Net abhängig ist.

Beachten Sie, dass NuGet-Abhängigkeiten nicht mit DLL-/Laufzeitabhängigkeiten identisch sind - NuGet-Abhängigkeit von Newtonsoft.Json> = 4.0.8 bedeutet nur, dass Sie SocektIO4Net in einem Projekt mit einer neueren Version von Newtonsoft.Json installieren dürfen nichts mit Laufzeiteinstellungen zu tun.

Neuere NuGet-Versionen sollten Assembly-Bindungs-Umleitungen automatisch für Sie hinzufügen, wenn Ihr Projekt über die Datei app.config oder web.config verfügt.

6

Ich habe kürzlich an einem alten Projekt gearbeitet. Ich musste unsere Newtonsoft.Json.dll aktualisieren, da ich eine "neue" API verwenden musste, die eine neuere Version benötigte, aber ich hatte noch andere DLLs, die die alte Version benötigten.

bindingRedirect Sie sagen? Nee. Es klagte immer wieder über die offenkundige Nichtübereinstimmung.

Separate codeBase tags? Nee. Es klagte immer wieder über die offenkundige Nichtübereinstimmung.

Das Problem war offensichtlich, dass die alte Version von Newtonsoft.Json.dll (3.0.0.0) KEIN PublicKeyToken hat, sondern die "neue" Version (4.5.7.1) DOES ein PublicKeyToken . Daher konnten sie nicht dasselbe abhängigeAssembly-Tag gemeinsam verwenden.

Dies ist, was ich endete mit:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="" culture="neutral"/>
    <codeBase version="3.0.0.0" href="bin\Newtonsoft_Old\Newtonsoft.Json.dll" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
    <codeBase version="4.5.0.0" href="bin\Newtonsoft.Json.dll" />
</dependentAssembly>

Hatte das gleiche Problem.

Ich habe es gerade gelöst.

Dies geschah, nachdem NuGet verwendet wurde, um Ext.NET zu installieren, das eine Abhängigkeit von Newtonsoft.JSON hat.
Es gab bereits eine Newtonsoft.JSON.dll-Datei in/bin (und natürlich einen Verweis darauf in der Datei web.config), ohne zu prüfen, dass ich die NuGet Package-Install-Prozedur während des Debuggens gestartet habe (also hatte die Datei wahrscheinlich eine sperren).

Im Laufzeitfehlerfenster wird auf der Stack-Ablaufverfolgung angezeigt, in welchem ​​Teil des Manifests ein Problem aufgetreten ist. Mein Hauptversion war die Hauptversion. Ich habe die Version des Installationspakets überprüft. und es war eine Hauptversion heraus. Die ursprüngliche NuGet-Datei wurde gefunden unter: "[physischer Pfad] /../ packages/Newtonsoft.Json. [Version]/lib/[. Net Version] /"

Da sowohl Manifest als auch Library vorhanden waren, kopierte es in den/bin-Ordner, aktualisierte die Informationen zur Hauptdatei web.config und es funktionierte.

Codebeispiele: Vorher

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

Nach dem

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

Hoffe das hilft

1
Kickass

In meinem Fall habe ich das Paket mit NuGet entfernt und ein neues installiert. Entfernen Sie dann die Referenz aus den Referenzen und fügen Sie sie erneut manuell hinzu. Funktioniert wie Charme. Hoffe, entschließe dich.

1
Gerson C Filho

Fügen Sie eine Assembly-Weiterleitung in Ihre App/web.config ein.

   <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" PublicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="1.0.0.0-4.5.11.0" newVersion="4.5.11.0" />
      </dependentAssembly>

Bitte beachten Sie, dass die Versionsnummern der installierten Version entsprechen müssen.

1
ChrisBint

Die obigen Lösungen sind korrekt, aber es gibt noch einen weiteren Punkt, der nicht vergessen werden sollte: Der Inhalt von app.config war derselbe wie der der obigen Lösungen.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Aber es ist eine gute Idee zu überprüfen, ob es auf dem neuesten Stand ist. In meinem Fall hängt Newtonsoft.JSON (v.6.0.4) von einem anderen Paket ab.

 enter image description here

Es gibt zwei Möglichkeiten;

  1. Update (Newtonsoft.JSON-Paket) letzte Versionen.
  2. Aktualisieren Sie die Datei app.config in den Versionsnummern.

Und der letzte Rat, wenn Sie mit mehreren Projekten arbeiten, zB . exe-dll und überprüfen Sie beide Versionen, ob es Newtonsoft.JSON gibt.

1
EgoistDeveloper

Andere Lösungen haben bei mir nicht funktioniert. Obwohl ich ein anderes Nuget-Paket hatte (Newtonsoft.Json.Schema Version = 3.0.0.0).
Mein Projekt war also ein ASP=) .NET-Projekt, und das Newtonsoft.Json.Schama-Paket wurde in einem .NET-Standardprojekt referenziert. Die Lösung bestand einfach darin, das Nuget-Paket hinzuzufügen Auch das WEB- (oder Startup-) Projekt und das Problem verschwand.

0
turanszkik

Der obige Fehler wurde in Visual Studio 2013To behoben: Im Paket mamnager Ausführen: Installationspaket newtonsoft.json Dadurch wird eine neue Zeile in packages.config <package id="Newtonsoft.Json" version="6.0.5" targetFramework="net45" />.__ hinzugefügt. Entfernen Sie die vorherige Zeile was möglicherweise auf die vorherige Version von packages.config ..__ verweist. Löschen Sie das Verzeichnis der alten Version im Packagers-Verzeichnis . Entfernen Sie die Referenz von NewtonSoft.Json und lesen Sie sie auf die neueste Version. Root webconfig hat die folgende <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> Sobald alles erledigt ist. Schließen Sie Visual Studio und öffnen Sie es erneut. Das sollte es beheben. Ich hatte bei der Installation von .__ den gleichen Fehler. PM> install-package durandal.starterkit Ich habe die obige Methode verwendet, um das Problem zu beheben. 

0
Venkat

Hatte das gerade mit TeamCity passiert und ich kann mir vorstellen, dass andere dies bald erfahren werden. Dies gilt wahrscheinlich für die meisten Build-Server , die NuGet-Pakete abrufen. 

Alle Antworten auf Weiterleitungen sind korrekt. Sie müssen jedoch immer noch die richtige Versionsnummer definieren. Mein Projekt verwendete Newtonsoft.Json 7.0, sie hatten jedoch gerade 8.0 freigegeben und TeamCity zog 8.0 herunter, was Probleme nur auf dem Server und nicht lokal verursachte. Alle meine Weiterleitungen wurden auf 7.0 gesetzt.

Stellen Sie sicher, dass die bereitgestellte Anwendung tatsächlich die richtige Version von NuGet erhält und nicht nur die neueste und beste Version. Oder aktualisieren Sie Ihre Konfiguration, um auf die neueste Version zu verweisen.

0
TyCobb