Impossible de charger le fichier ou l'assembly «Newtonsoft.Json, version = 4.5.0.0, Culture = neutre, PublicKeyToken = 30ad4fe6b2a6aeed»

233

Je reçois l'erreur

System.IO.FileLoadException: impossible de charger le fichier ou l'assembly 'Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed' ou l'une de ses dépendances. La définition du manifeste de l'assembly localisé ne correspond pas à la référence de l'assembly. (Exception de HRESULT: 0x80131040)

pour ma construction CI

Solution que j'ai essayée

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

Cela n'a pas fonctionné non plus

user3437755
la source
L'erreur signifie que .NET n'a pas pu trouver la bibliothèque Json.NET . L'avez-vous installé?
TypeIA
22
Exactement le même problème - me rendre fou. Faites-moi savoir si vous trouvez une solution
Dean Chalk
En fait, pour moi, l'ajout de ce que vous avez essayé a résolu le problème.
h.alex
Utilisez l'option de consolidation dans le gestionnaire de packages NuGet pour vous assurer que les versions ne s'écartent pas.
niico
C'est la seule chose qui a fonctionné pour moi: github.com/Redth/PushSharp/issues/361#issuecomment-181387928
RichC

Réponses:

237

Dans l' exécution de la console gestionnaire de paquets: Update-Package –reinstall Newtonsoft.Json.

METTRE À JOUR

J'ai initialement posté cela comme un commentaire, mais comme @OwenBlacker l'a suggéré, je vais le mettre ici:

Si vous obtenez toujours une erreur après avoir fait cela, alors ce qui a fonctionné pour moi, c'est que j'ai supprimé la <dependentAssembly>section Json.Net de mon .configfichier. Réinstaller le ramène s'il n'est pas là et, apparemment, vous devez le supprimer. Jusqu'à ce qu'il y ait une solution normale dans le package lui-même, je crains que cette étape manuelle soit un must.

Remarque: veuillez lire les commentaires ci-dessous avant de procéder.

Selon le commentaire de René ci-dessous, sachez que la commande publiée dans la réponse réinstalle le package dans chaque projet de votre solution. Donc, si vous utilisez le package Newtonsoft.Json dans plusieurs projets et utilisez peut-être différentes versions, l'exécution de la commande ci-dessus peut avoir des conséquences indésirables.

bobah75
la source
7
Pour le plaisir de tous ceux qui lisent ceci: je l'ai fait et j'ai toujours l'erreur. Puis je l'ai résolu d'une manière ou d'une autre: Étonnamment, j'ai dû supprimer la <dependentAssembly>section Json.Net de mon .configfichier. Réinstaller le ramène s'il n'est pas là et, apparemment, vous devez le supprimer. Jusqu'à ce qu'il y ait une solution normale dans le package lui-même, je crains que cette étape manuelle soit un must.
Ofer Zelig
@OferZelig Vous devez publier cela comme une réponse distincte, afin qu'il puisse obtenir les votes positifs (et, plus important encore, une attention accrue). Pas moins parce que cela a fonctionné pour moi aussi :)
Owen Blacker
@OwenBlacker merci. Mais comme il y a déjà beaucoup de réponses, la mienne se perdra. Et cette réponse est assez bonne, c'est juste que si ça ne marche pas alors mon commentaire la "complète". Vous savez quoi? Je suppose que je vais juste modifier la réponse originale. Plus important que de gagner son propre représentant.
Ofer Zelig
43
Sachez que la commande publiée dans la réponse réinstalle le package dans chaque projet de votre solution. Donc, si vous utilisez le package Newtonsoft.Json dans plusieurs projets et utilisez peut-être différentes versions, l'exécution de la commande ci-dessus peut avoir des conséquences indésirables.
René
Résolu! Pour moi, j'avais installé la v6 dans un projet, la réinstallation à partir du gestionnaire de packages l'a amenée à la v7.
jv-dev
123

Pour tous ceux qui ont des problèmes avec la version Newtonsoft.Json v4.5, essayez d'utiliser ceci dans web.config ou app.config:

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

IMPORTANT : vérifiez que la configurationbalise de votre fichier de configuration n'a pas d'attribut d'espace de noms (comme suggéré dans https://stackoverflow.com/a/12011221/150370 ). Sinon, les assemblyBindingbalises seront ignorées.

ZeroDotNet
la source
3
pour moi, la suppression manuelle du contenu du dossier bin après le nettoyage (qui ne le vide pas) a fait l'affaire après avoir appliqué cette réponse.
Mikaël Mayer
Merci énormément pour ceci! :)
Kamron K.
Fonctionne très bien! À partir du 7/4/15, la version actuelle de Newtonsoft.Json est 7.0.0, elle newVersion="6.0.0.0"doit donc être changée en newVersion="7.0.0.0"ou quelle que soit la version que vous utilisez
Moses Machua
3
Cette note sur l'espace de noms ... Je pourrais te faire un câlin. J'ai brûlé des heures à ce sujet sans savoir que les redirections de liaison étaient ignorées à cause de cela.
Brian
1
La note sur l'espace de noms est si importante qu'elle pourrait être une réponse à part entière. Merci beaucoup.
beawolf
42

Le point clé est de référencer la bonne version dans votre fichier de configuration.

Pas;

1- regardez quelle est la version de votre Newtonsoft.Json.dll dans la propriété de référence du projet quelle que soit la version dans votre dossier de package (par exemple la mienne est 7.0.1 et la version de référence est 7.0.0.0)

2- regardez ce que le projet attend de vous dans l'exception (le mien est 6.0.0.0)

3- Ajoutez l'assembly dépendant à votre fichier de configuration comme il se doit.

  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json"  publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
  </dependentAssembly>
Kadir Can
la source
Désolé, vous ne pouvez donner qu'un vote à votre point (par exemple, le mien est 7.0.1 et la version de référence est 7.0.0.0) a fait une énorme différence. J'aurais donné plus ..... Merci :)
Zaker
Cela a fonctionné pour moi. J'ai mis à jour la version à 7, mais la version 8 fonctionnait vraiment, j'ai donc changé la nouvelle version en 8.0, merci!
Keith
Même si l'installation de 8.0.3 (comme il est dit dans le gestionnaire de paquets nuget), le .dll sous références est toujours 8.0.0. J'ai donc changé pour 8.0.0.0 dans mon web.config. Je me demandais comment cela fonctionnait hier quand j'ai tout publié et ce matin, cela ne fonctionne plus.
CularBytes
24

Je n'ai eu aucune chance avec aucune des solutions présentées ici (désinstallation, réinstallation, suppression de références, création de bindingRedirects, etc.) J'ai dû revenir à une ancienne version de Newtonsoft. La version 5.0.6 fonctionnait auparavant, j'ai donc essayé celle-là. J'ai dû entrer ces deux commandes dans la console du package:

uninstall-package newtonsoft.json -force

install-package newtonsoft.json -version "5.0.6"

L' -forceoption de la première commande est requise pour forcer la désinstallation. Les dépendances avec d'autres assemblys empêchent la désinstallation sans lui.

Karl Hoaglund
la source
A fonctionné comme un charme. Eu l'erreur dans mon projet MVC 4. Presque passé au sérialiseur natif.
Kees C. Bakker
merci, je devais juste changer -version "5.0.6" en -pre: install-package newtonsoft.json -pre
thiago.adriano26
22

J'ai résolu le problème en ajoutant cette redirection de liaison à mon fichier .config:

<runtime>
    . . . 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
                culture="neutral" />
            <bindingRedirect oldVersion="4.5.0.0" newVersion="6.0.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

Le message d'erreur se plaint de ne pas trouver la version 4.5.0.0, la version actuelle de Newtonsoft.Json est 6.0.0.0, donc la redirection devrait passer de 4.5 à 6.0, pas vice versa

MiMo
la source
Oui, cela a résolu mon problème. Tellement étrange la quantité de problèmes que JSON.NET provoque ... mais une fois qu'il est devenu une machine de rêve. Merci +1
Piotr Kula
Votre extrait de code m'a fait réaliser qu'il manquait l'élément 'assemblyBinding'. Merci
Riga
21

Je pense que vous pointez vers la mauvaise cible, changez-la en 4.5 au lieu de 6.0

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

Cela devrait fonctionner.

BrunoLM
la source
1
Umbraco 7 nécessitait la version 4.5.0.0, cela a donc aidé à le mettre en service
MagicalArmchair
19

J'ai passé quelques jours à essayer de résoudre ce problème frustrant. J'ai essayé à peu près tout ce qui peut être trouvé sur le Web. Enfin, j'ai trouvé que cette erreur pouvait être causée (comme dans mon cas) par les différentes versions du projet .Net cible (4.5 et 4.5.1) dans une seule solution. Les étapes ci-dessous l'ont réparé pour moi:

  1. Vérifiez la version .Net de chaque projet qui est dans votre solution. Faites un clic droit sur le projet et allez à Properties.

entrez la description de l'image ici

  1. Si possible, définissez la même version .Net pour tous les projets. Sinon, essayez au moins de changer celui du projet de démarrage (pour moi, c'est celui qui a causé les problèmes).

  2. Retirez tous les Newtonsoft.Jsonpacks de la solution.

    uninstall-package newtonsoft.json -force

  3. Mettre à jour toutes les Newtonsoft.Jsonversions dans tous les packages.configfichiers, comme ça

    <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" />

  4. Réinstallez à Newtonsoft.Jsonpartir de "Package Manager Console" avec:

    install-package newtonsoft.json

  5. Reconstruisez la solution

(Facultatif) 7. Si vous avez modifié le projet de démarrage, renvoyez-le à nouveau

ekostadinov
la source
12
uninstall-package newtonsoft.json -force
install-package newtonsoft.json

A fait l'affaire pour moi :)

Chiranjeeb
la source
1
cela a aussi fait l'affaire pour moi. il a automatiquement mis à jour le fichier webconfig vers la version correcte.
Shaakir
Moi aussi, cela m'a vraiment aidé.
Mike Malter
11

si vous utilisez plusieurs projets dans la même solution et la même bibliothèque, tous les projets ont la même version de Newtonsoft.Json

Fatih
la source
C'était mon problème. Très frustrant de parcourir toutes les réponses ci-dessus et d'obtenir aucun résultat. Enfin compris quand j'ai pris la peine de vérifier la version du fichier .dll dans mon dossier Build.
10

Supprimez l'assembly Newtonsoft.Json de la référence de projet et ajoutez-le à nouveau. Vous avez probablement supprimé ou remplacé la DLL par accident.

helb
la source
Cette approche a fonctionné contre un projet iOS Xamarin Forms où j'ai abandonné le package NuGet et l'ai rajouté. Merci.
Le sénateur
9

J'écrivais un client de service WebApi REST, donc pour moi, cette erreur a été provoquée par l'ajout manuel de références aux assemblys System.Net.Httpet System.Net.Http.Formattingvia Ajouter une référence, alors que j'aurais dû ajouter le Microsoft.AspNet.WebApi.Clientpackage via NuGet . Voir aussi cette réponse à une autre question .

mschwaig
la source
8

Vous disposez de 2 versions différentes de la bibliothèque JSON.NET dans votre solution. Pour résoudre ce problème, vous devez les mettre à niveau vers la dernière version. Suivez ces étapes:

1-Ouvrir l'explorateur de solutions 2-Cliquer avec le bouton droit sur le nom de la solution 3-Sélectionner Gérer les packages Nuget pour la solution 4-Sélectionner les mises à jour dans le menu 5-Mettre à jour le package JSON.NET

Cela résoudra votre problème.

lien: impossible de charger le fichier ou l'assembly «Newtonsoft.Json, version = 7.0.0.0, Culture = neutre, PublicKeyToken = 30ad4fe6b2a6aeed» ou l'une de ses dépendances

mohammad
la source
Le moyen le plus simple et le plus sûr de résoudre ce problème. Merci @mohammad
deanwilliammills
7

Déployer la version correcte sur la machine CI

Cela vous indique que le chargeur d'assembly a trouvé une version différente de l' Newtonsoft.Jsonassembly, qui ne correspond pas à la référence que vous avez créée dans votre projet. Pour charger correctement l'assembly, vous devez soit déployer l'assembly côte à côte avec votre code compilé, soit installer la version correcte de l'assembly dans la machine de destination (c'est-à-dire dans le GAC).

Alternative: assurez-vous que la configuration est dans le bon fichier

Si vous souhaitez conserver la solution actuelle et charger un assembly avec une version différente, assurez-vous que la configuration que vous avez publiée se trouve dans le .configfichier correct . N'oubliez pas qu'il n'y en a pas xpto.dll.config, une DLL chargée par une application utilise toujours le fichier de configuration de l'application en cours d'exécution.

Miguel Angelo
la source
6

Normalement, l'ajout de la redirection de liaison devrait résoudre ce problème, mais cela ne fonctionnait pas pour moi. Après quelques heures à me cogner la tête contre le mur, j'ai réalisé qu'il y avait un attribut xmlns causant des problèmes dans mon web.config. Après avoir supprimé l'attribut xmlns du nœud de configuration dans Web.config, les redirections de liaison ont fonctionné comme prévu.

http://www.davepaquette.com/archive/2014/10/02/could-not-load-file-or-assembly-newtonsoft-json-version4-5-0-0.aspx

David Paquette
la source
5
<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="7.0.0.0"/>
  </dependentAssembly>
</assemblyBinding>

Fonctionne pour moi .... mettez simplement la version que vous utilisez dans newVersion ie (newVersion = "7.0.0.0")

Ali
la source
J'ai eu ce problème il y a quelques temps et cela s'est résolu en un seul coup. Merci beaucoup.
GutierrezDev
5

Fermer la solution.

Ouvrez packages.configet *.csprojavec l'éditeur de texte et supprimez n'importe quelle ligne avec Newtonsoft.Json

Ex:
<Reference Include="Newtonsoft.Json,Version=9.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath> <Private>True</Private> </Reference>

Ou <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />

Ouvrez à nouveau la solution et réinstallez Newtonsoft.Json par Install-Package Newtonsoft.Json

Ça marche pour moi.

Trương Quốc Khánh
la source
cela fonctionne parfois, mais dans les versions à venir, ce problème est revenu à nouveau n
Heemanshu Bhalla
Pas de problème si ne le mettez pas à jour haha. Créez un projet de corbeille et installez Newtonsoft.Json.dll, copiez-le (fichier dll) et ajoutez-le à la référence de votre projet.
Trương Quốc Khánh
4

Nous avions exactement le même problème que vous avez mentionné. Nous utilisons nunit pour exécuter des tests via CI, et nous avons nunit qui exécute un fichier appelé tests.nunit, qui décrit une liste de montages de DLL de test à exécuter.

Chaque appareil de test avait son propre fichier de configuration, mais lorsqu'il est exécuté dans le fichier "tests.nunit", les redirections de liaison semblent être ignorées. La solution consistait à ajouter les redirections de liaison à un nouveau fichier de configuration, "tests.config" qui se trouvait à côté du fichier "tests.nunit".

declyne
la source
peux-tu élaborer?
KirstieBallance
4

J'ai le même type de problème. Et je l'ai également résolu en procédant simplement comme suit: Accédez à TOOLS > NuGet Package Manager et sélectionnez Package Manager Console . Enfin, exécutez les deux commandes suivantes :)

  1. uninstall-package newtonsoft.json -force
  2. install-package newtonsoft.json
Masud Shrabon
la source
4

Vous devez mettre à jour le fichier web.config sur le serveur. Lorsque nuget installe NewtonSoft, mettez à jour ce fichier, y compris ce code

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

oaamados
la source
Dans mon cas, c'était exactement ma solution, mis dans app.config. "Les versions d'assembly peuvent être redirigées dans des fichiers d'application, de stratégie d'éditeur ou de configuration de machine."
datps
4

Vérifiez simplement la version des propriétés de Newtonsoft.Json Newtonsoft

Ensuite, vous devez ajouter cette version dans votre configuration Web (dans mon cas 8.0.0.0) Configuration Web

Gerald Stanley Padgett Espinoz
la source
3

J'ai fait l'erreur d'ajouter un fichier NewtonSoft .dll pour .Net 4.5.

Mon projet principal était 4.5, mais quand j'ai ajouté un projet supplémentaire à ma solution, il l'a étrangement ajouté en tant que projet .Net 2.0 ... et quand j'ai essayé d'utiliser la DLL 4.5 de NewtonSoft avec cela, j'ai obtenu ce "Newtonsoft.Json ne pouvait pas 'ne pas être trouvé "erreur.

La solution (bien sûr) était de faire passer ce nouveau projet de .Net 2.0 à 4.5.

Mike Gledhill
la source
3

Dans mon cas, le projet principal faisait toujours référence à une ancienne version de Newtonsoft.Json qui n'existait plus dans le projet (indiquée par un point d'exclamation jaune). La suppression de la référence a résolu le problème, aucun bindingRedirect n'était nécessaire.

IngoB
la source
3

J'ai eu exactement le même problème avec la version 7.0.0.0, et la bibliothèque à l'origine de mon problème était Microsoft.Rest.ClientRuntime qui faisait en quelque sorte référence à la mauvaise version (6.0.0.0) de Newtonsoft.json, malgré la bonne gestion des dépendances dans le nugget ( la bonne version de newtonsoft.json (7.0.0.0) a été installée).

J'ai résolu cela en appliquant la redirection ci-dessus de 6.0.0.0 à 7.0.0.0 (de Kadir Can) dans le fichier de configuration:

<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0" />

----> Après quelques jours sans rien changer, il est revenu avec la même erreur. J'ai installé la version 6.0.0.0 et je l'ai mise à jour vers 7.0.0.0, cela fonctionne bien maintenant.

lazizanie
la source
A travaillé pour moi. Version installée Newtonsoft Json 7.0.1 (beta), mais la configuration générée pointait vers 6.0.0.0, ce qui n'était pas correct. Merci!
Dhanuka777
2

Dans mon cas, après avoir téléchargé l'assembly et ajouté la référence au projet, j'ai résolu cela en «débloquant» la DLL avant d'ajouter la référence au projet.

À l'aide de l'explorateur Windows, accédez à l'emplacement de la DLL, cliquez avec le bouton droit sur la DLL, puis sélectionnez «propriétés». Vous trouverez un bouton «débloquer» sur l'un des onglets, puis vous pourrez ajouter la référence et l'assemblage se chargera correctement.

VorTechS
la source
2

Cliquez avec le bouton droit sur votre projet, sélectionnez gérer les packages Nuget, tapez newtonsoft dans la zone de recherche et installez la dernière version. Exécutez ensuite votre application

uche Godfrey
la source
2

J'étais confronté à la même erreur et j'ai lutté avec elle pendant des heures. J'avais un projet d'API Web qui utilise Newtonsoft.json et un autre projet UnitTest pour le projet d'API Web. Le projet de test unitaire avait également besoin de la référence Newtonsoft.json. Mais en ajoutant le lien, je recevais l'exception ci-dessus.

Je l'ai finalement résolu en ajoutant l'extrait de code ci-dessous dans le fichier app.config du projet de test unitaire:

<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>
mukulsharma1146
la source
<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>
mukulsharma1146
J'avais ce même problème lorsque j'ai mis à niveau Nestwonsoft.Json tout en utilisant l'ancienne version de WebAPI, et cela l'a résolu. Merci!
Gavin.Paolucci.Kleinow
2

Un autre problème insidieux est qu'il semble que les redirections de liaison peuvent échouer silencieusement si l'élément a une configuration incorrecte sur tout autre élément d'assemblage dépendant.

Assurez-vous que vous n'avez qu'un seul élément sous chaque élément.

Dans certains cas, VS génère ceci:

  <dependentAssembly>
    <assemblyIdentity ...
    <assemblyIdentity ...
  </dependentAssembly>

Au lieu de

  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>

Cela m'a pris beaucoup de temps pour réaliser que c'était le problème!

Daniel
la source
2

La section ci-dessous s'ajoute à votre web.config

<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>
Jaydeep Shil
la source
2

Si l'erreur disparaît localement et apparaît toujours sur le serveur, la solution qui fonctionne avec moi consiste à supprimer le dossier bin et packages.config et web.config et à télécharger à nouveau ces fichiers

Ahmad Alaa
la source