Newtonsoft.json assemblée paquet incompatibilité de version

je suis en train d'utiliser SocketIO4Net pour créer socket.j'ai un client .net. Itseems SocketIO4Net a une dépendance de Newtonsoft.Json >= 4.0.8. Je suis aussi à l'aide de Pushshsharp bibliothèque qui a un Newtonsoft.Dépendance Json > = 4.5.10. J'ai eu NewtonSoft.JSON 4.5.11 lorsque J'ai installé PushSharp pour la première fois et que j'ai pensé que cette version devrait prendre en charge SocketIO4Net aussi car c'est une version plus haute, mais j'obtiens cette erreur à chaque fois que j'essaie de me connecter à socket.io serveur.

ne pouvait pas charger le fichier ou l'assemblage Newtonsoft.Json, Version=4.0.8.0, Culture=neutre, PublicKeyToken = 30ad4fe6b2a6aeed' ou l'une de ses dépendances. L'assemblée manifeste définition ne correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)

je me suis cogné la tête toute la journée avec ces problèmes de dépendance, je serais très reconnaissant si quelqu'un pouvait m'indiquer la bonne direction.

19
demandé sur Uwe Keim 2013-06-21 17:21:13

10 réponses

solution trouvée, try with:

<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
répondu ZeroDotNet 2014-06-27 21:24:47

vous pouvez modifier la configuration assembly-binding et ajouter une redirection. Voir Redirection Des Versions D'Assemblage sur MSDN.

fondamentalement, vous voulez ajouter l'extrait suivant à votre app.config ou web.config fichier:

<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

Pourquoi devez-vous rediriger les versions d'assemblage? Même si SocketIO4Net supporte les nouvelles versions de Newtonsoft.Json, il a été compilé avec une seule version (4.0.8 dans votre cas). Cette version est stockée dans la DLL et il est utilisé pour charger DLLs SocketIO4Net dépend de.

notez que les dépendances NuGet ne sont pas les mêmes que les dépendances DLL/runtime - dépendance NuGet sur Newtonsoft.Json >= 4.0.8 signifie seulement que vous serez autorisé à installer SocektIO4Net dans un projet qui a une nouvelle version de Newtonsoft.Json, ça n'a rien à voir avec les réglages d'exécution.

cela étant dit, les versions récentes de NuGet devraient ajouter assembly-binding-redirects automatiquement pour vous si votre projet a app.config ou web.fichier de configuration.

5
répondu Miroslav Bajtoš 2013-09-04 09:56:10

mettre une redirection d'assemblage dans votre application/web.config;

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

veuillez noter que les numéros de versions doivent correspondre à la version que vous avez installée.

1
répondu ChrisBint 2013-06-21 13:24:30

avait le même problème.

résolu.

C'est arrivé après que NuGet ait été utilisé pour installer Ext.NET qui a une dépendance pour Newtonsoft.JSON.

Il y avait déjà un Newtonsoft.JSON.dll fichier dans /bin (et évidemment une référence dans le web.fichier de configuration) sans vérifier le dossier J'ai commencé la procédure D'installation du paquet NuGet pendant le débogage(donc le fichier avait probablement une serrure).

sur la fenêtre d'erreur runtime il vous indiquera sur la pile trace quelle partie du manifeste il a un problème avec, la mienne était la version majeure donc j'ai vérifié la version du paquet d'installation. et c'était le 1 version majeure. Trouvé le fichier NuGet original sous: "[physical path]/ .. / packages / Newtonsoft.Json.[version] / lib/[.net version]/"

les deux manifestes et la bibliothèque étaient là donc copié dans / bin dossier, mis à jour le Web racine.config de l'assemblée de l'information et cela a fonctionné.

Code échantillon: Avant

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

après

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

J'espère que cela aidera

1
répondu Kickass 2015-11-17 11:01:52

dans mon cas, J'ai enlevé le paquet avec NuGet et j'en ai installé un nouveau. Puis, supprimez la référence des références et ajoutez à nouveau manuellement. Fonctionne comme un charme. L'espoir de résoudre pour vous.

1
répondu Gerson C Filho 2016-12-09 02:12:46

je travaillais sur un vieux projet récemment. J'avais besoin de mettre à jour notre Newtonsoft.Json.dll, puisque j'ai dû utiliser une "nouvelle" API qui nécessitait une nouvelle version, mais j'avais encore d'autres DLLs qui nécessitaient l'ancienne version.

bindingRedirect dites-vous? Nope. Il n'arrêtait pas de se plaindre de l'inadéquation manifeste.

Distinct code