web-dev-qa-db-fra.com

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

Je reçois l'erreur 

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

pour ma construction de 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é

208
user3437755

Dans la console du gestionnaire de paquets, exécutez: Update-Package –reinstall Newtonsoft.Json.

METTRE &AGRAVE; JOUR

Au départ, j'avais posté ceci en tant que commentaire, mais comme @OwenBlacker a suggéré de le mettre ici:

Si vous obtenez toujours une erreur après cela, alors ce qui a bien fonctionné pour moi, c'est que j'ai supprimé la section <dependentAssembly> de Json.Net de mon fichier .config. 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 paquet lui-même, je crains que cette étape manuelle ne soit obligatoire.

Note: S'il vous plaît lire les commentaires ci-dessous avant de faire cela.  

Selon le commentaire de René ci-dessous BE AWARE que la commande affichée dans la réponse réinstallera le package dans chaque projet de votre solution. Par conséquent, si vous utilisez le package Newtonsoft.Json dans plusieurs projets et utilisez éventuellement des versions différentes, l'exécution de la commande ci-dessus risque d'avoir des conséquences indésirables.

218
bobah75

Pour tous ceux qui ont des problèmes avec la version de Newtonsoft.Json v4.5, utilisez 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 balise configuration de votre fichier de configuration n'a pas d'attribut d'espace de nom (comme suggéré dans https://stackoverflow.com/a/12011221/150370 ). Sinon, les balises assemblyBinding seront ignorées.

114
ZeroDotNet

L'essentiel 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 de votre dossier de paquets (par exemple, le mien 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- Ajouter l’Assemblée dépendante à 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>
37
Kadir Can

Aucune des solutions présentées ici (désinstallation, réinstallation, suppression de références, création de bindingRedirects, etc.) n’a eu de chance. 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 de package:

uninstall-package newtonsoft.json -force

install-package newtonsoft.json -version "5.0.6"

L'option -force de la première commande est requise pour forcer la désinstallation. Les dépendances avec d'autres assemblages empêchent la désinstallation sans cela.

24
Karl Hoaglund

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 indique que la version 4.5.0.0 n'a pas été trouvée. La version actuelle de Newtonsoft.Json est 6.0.0.0. La redirection doit donc passer de 4.5 à 6.0 et non l'inverse

21
MiMo

Je pense que vous pointez sur 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 marcher.

19
BrunoLM

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

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

 enter image description here

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

  2. Supprimez tous les packs Newtonsoft.Json de la solution.

    uninstall-package newtonsoft.json -force

  3. Mettre à jour toutes les versions de Newtonsoft.Json dans tous les fichiers packages.config, comme ceci 

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

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

    install-package newtonsoft.json

  5. Reconstruire la solution

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

18
ekostadinov
uninstall-package newtonsoft.json -force
install-package newtonsoft.json

L'astuce pour moi :)

11
Chiranjeeb

J'écrivais un client de service WebApi REST. Cette erreur a donc été provoquée en ajoutant manuellement des références aux assemblys System.Net.Http et System.Net.Http.Formatting via Ajouter une référence, alors que j'aurais dû ajouter le package Microsoft.AspNet.WebApi.Client via NuGet. Voir aussi cette réponse à une autre question .

9
mschwaig

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

9
helb

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

9
Fatih

Vous avez 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-Ouvrez l'explorateur de solutions 2-Cliquez à droite sur le nom de la solution 3-Sélectionnez Gérer les packages de nugets pour la solution 4-Sélectionnez Mises à jour dans le menu 5-Mettez à jour le package JSON.NET

Cela résoudra votre problème.

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

7
mohammad

Ajouter normalement 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, je me suis rendu compte qu'il y avait un attribut xmlns qui causait des problèmes dans mon fichier 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

6
David Paquette
<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 .... il suffit de mettre la version que vous utilisez dans newVersion i.e (newVersion = "7.0.0.0")

5
ali

Fermer la solution.

Ouvrez packages.config et *.csproj avec 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>

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

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

Ça marche pour moi.

5

Déployez la version correcte sur la machine CI

Cela vous indique que le chargeur d'assemblage a trouvé une version différente de l'assembly Newtonsoft.Json, qui ne correspond pas à la référence que vous avez créée dans votre projet. Pour charger correctement l’Assembly, vous devez déployer l’Assembly côte à côte avec votre code compilé ou installer la version appropriée de l’Assembly sur la machine de destination (c.-à-d. 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 fichier .config correct. N'oubliez pas qu'il n'y a pas de xpto.dll.config, une DLL chargée par une application utilise toujours le fichier de configuration de l'application en cours d'exécution.

5
Miguel Angelo

Vous devez mettre à jour le fichier web.config sur le serveur . Lorsque nuget installe NewtonSoft, mettez à jour ce fichier en incluant 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>

4
oaamados

Nous avons eu exactement le même problème que vous avez mentionné. Nous utilisons nunit pour exécuter des tests via CI, et un programme appelé tests.nunit, qui décrit une liste des fixtures de test dll à 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 vers un nouveau fichier de configuration, "tests.config", situé à côté du fichier "tests.nunit".

4
declyne

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 dépendance management in nugget (la bonne version de newtonsoft.json (7.0.0.0) a été installée).

J'ai résolu ce problème 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, la même erreur s'est produite. J'ai installé la version 6.0.0.0 n mise à jour à 7.0.0.0 cela fonctionne bien maintenant.

3
Lokman Ersoy

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

3
IngoB

Il suffit de vérifier la version de Newtonsoft.JsonPropriétés de Newtonsoft

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

Un autre problème insidieux est qu’il semble que les redirections de liaison peuvent tout simplement échouer en silence si la configuration de l’élément est incorrecte pour tous les autres éléments dependAssembly.

Assurez-vous de n'avoir 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>

Il m'a fallu longtemps pour comprendre que c'était le problème!

2
Daniel

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

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

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

2
Mike Gledhill

Rien d’en haut ne m’a aidé, mais ce qui a réellement été résolu est le suivant:

  1. Supprimer toutes les liaisons de dépendance dans app.config (de tous les fichiers app.config de la solution)
  2. Exécutez la commande suivante à partir de "Console du gestionnaire de package"

Get-Project -Tout | Add-BindingRedirect

  1. Reconstruire

Référence: http://blog.myget.org/post/2014/11/27/Could-not-load-file-or-Assembly-NuGet-Assembly-Redirects.aspx

2
valentinvs

Je faisais face à la même erreur et ai lutté avec 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>
2
mukulsharma1146

Dans mon cas, après avoir téléchargé l’Assembly et ajouté la référence au projet, j’ai résolu le problème en "débloquant" la DLL avant d’ajouter la référence au projet.

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

2
VorTechS

Réinstaller le paquet newtonsoft via Nuget n'a pas fonctionné pour moi. J'ai dû appeler manuellement JsonConvert.DeserializeObject pour contourner ce problème.

J'ai changé 

HttpResponseMessage response = await client.GetAsync(url));
response.EnsureSuccessStatusCode();
MyObject data = await response.Content.ReadAsAsync<MyObject>();

Pour 

HttpResponseMessage response = await client.GetAsync(url));
response.EnsureSuccessStatusCode();
string jsonStr = await response.Content.ReadAsStringAsync();
MyObject data = JsonConvert.DeserializeObject<MyObject>(jsonStr);
2
Bioupy

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 version la plus récente. Puis lancez votre application

2
uche Godfrey

Section ci-dessous ajouter à 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>
2
Jaydeep Shil

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 les packages.config et web.config, puis à remettre ces fichiers

2
Ahmad Alaa

Un autre conseil au sujet ouvert. L'erreur apparaît après l'exécution de "Analyser": quelque chose a été modifié dans les paramètres du projet. Le problème était que dans:

Projet/Paramètres/Construire/Cible de la plateforme

est apparu "Any CPU" .

Revenir à x86 (ou peut-être x64 dans votre cas) a résolu le problème.

1
Badiboy

Le problème pour moi était une version dépréciée de Newtonsoft.Json. Réinstaller n'a pas aidé.

Dans Visual Studio, sélectionnez Outils-> Gérer les packages NuGet. Sélectionnez Mises à jour. Recherchez Newtonsoft. Cliquez sur Mettre à jour pour installer la dernière version.

1
spadelives

De plus, dans un environnement CI avec une restauration NuGet, assurez-vous que des dossiers partiels ne sont pas archivés dans le contrôle de source. Par défaut, lors de l'ajout de dossiers au contrôle de source, il exclut automatiquement les assemblys. En outre, cela va à l’encontre de l’objectif de la restauration des paquets Nuget lors de la construction. La vérification des assemblys ou l'absence de contrôle dans les dossiers de packages donnera une construction réussie, mais la meilleure pratique consiste à ne pas vérifier les packages de nuget dans le contrôle de source. 

1
JMiera

J'ai résolu ce problème en installant le package Nuget: Bibliothèques clientes Microsoft ASP.NET Web API 2.2. Cela a à son tour installé la version 6.04 de newtonsoft.json

1
JohnnyBT

Outre de nombreuses réponses ici, j'ai trouvé quelque chose par conséquent l'ajouter. Premier point, assurez-vous que la dll n'est pas référencée à partir de GAC. À part cela,

Lors de l'ajout/de la modification de la dll de Newtonsoft.Json, il arrive que * .csproj du projet ne soit pas modifié ou que la version modifiée de la DLL json ne soit pas prise en compte dans csproj de la solution.

Alors ouvrez le projet dans le bloc-notes ++ et recherchez Newtonsoft.Json et renommez le JSON de l'ancienne version en Nouvelle version de manière explicite. Maintenant, après avoir rétabli la valeur VS, la solution/projet rechargera avec la version requise Newtonsoft.JSON dll.

0
Hameed Syed

Vous pouvez trouver la version installée de votre bibliothèque ur à partir des propriétés dans les références. Pour mon cas j'avais 8.0.0.0 installé. L'erreur dit Could not load file or Assembly 'Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies.

Je devais donc ajouter manuellement les éléments suivants dans web.config 

  <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="6.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
      </dependentAssembly>
0
Irshu
updating web.config with the following Assembly binding resolved the issue 
<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>
0
Subhamay

Je me bats depuis un jour ou deux aussi, j'ai essayé toutes les solutions… .. Ce qui m'a aidé, c'est de vérifier les majuscules dans app.config. J'avais PublicKeyToken au lieu de publicKeyToken, après l'avoir changé, tout à coup a fonctionné.

0
Igor Be

Dans mon cas, j'avais le nom de dossier Newtonsoft.Json.6.0.7

 enter image description here

mais le fichier .csproj avait un chemin bien que le dossier ...\Newtonsoft.Json.6.0.5\...

 enter image description here

Changer le fichier .csproj pour que 6.0.7 résolve le problème.

0
Alex L