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é
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.
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.
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>
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.
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
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.
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:
Properties
.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).
Supprimez tous les packs Newtonsoft.Json
de la solution.
uninstall-package newtonsoft.json -force
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" />
Réinstallez Newtonsoft.Json
à partir de "Package Manager Console" avec:
install-package newtonsoft.json
Reconstruire la solution
(Facultatif) 7. Si vous avez modifié le projet de démarrage, renvoyez-le à nouveau.
uninstall-package newtonsoft.json -force
install-package newtonsoft.json
L'astuce pour moi :)
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 .
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.
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
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.
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.
<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")
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.
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.
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>
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".
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.
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.
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!
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.
Rien d’en haut ne m’a aidé, mais ce qui a réellement été résolu est le suivant:
Get-Project -Tout | Add-BindingRedirect
Référence: http://blog.myget.org/post/2014/11/27/Could-not-load-file-or-Assembly-NuGet-Assembly-Redirects.aspx
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>
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.
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);
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
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>
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
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.
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.
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.
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
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.
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>
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>
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é.