91 votes

Comment puis-je résoudre les conflits de version d'assembly avec JSON.NET après avoir mis à jour les références de package NuGet dans un nouveau projet ASP.NET MVC 5?

J'ai créé un nouveau projet web ASP.NET MVC 5 dans VS 2013 (Mise à jour 1) puis j'ai mis à jour tous les packages NuGet. Lorsque je construis le projet, je reçois le avertissement suivant:

Avertissement MSB3243: Aucun moyen de résoudre le conflit entre "Newtonsoft.Json, Version=6.0.0.0, Culture=neutre, PublicKeyToken=30ad4fe6b2a6aeed" et "Newtonsoft.Json, Version=4.5.0.0, Culture=neutre, PublicKeyToken=30ad4fe6b2a6aeed".

Cependant, lorsque je vérifie le web.config, je vois qu'une redirection de liaison est en place:

Exactement ce que l'avertissement conseille.

Comment puis-je corriger cet avertissement?

0 votes

Oui, j'ai fait une reconstruction complète. J'ai également mis à jour NuGet vers la dernière version, créé une nouvelle solution et reproduit exactement le même problème.

107voto

Jim Lamb Points 10474

Voici les étapes que j'ai utilisées pour résoudre l'avertissement :

  • Décharger le projet dans VS
  • Modifier le fichier .csproj
  • Rechercher toutes les références à l'assembly Newtonsoft.Json
    • J'ai trouvé deux références, une pour la v6 et une pour la v5
    • Remplacer la référence à la v5 par la v6
  • Recharger le projet
  • Compiler et remarquer l'échec de la référence à l'assembly
  • Voir les Références et constater qu'il y a maintenant deux références à Newtonsoft.Json. Supprimer celle qui ne parvient pas à se résoudre.
  • Reconstruire - aucun avertissement

12 votes

J'ai trouvé deux références, une pour v6 et une pour v5 mais j'ai supprimé (pas remplacé) celle de v5. Après cela, je n'ai rencontré aucun problème comme une "erreur de référence d'assembly" ou deux références à Newtonsoft.Json dans l'interface utilisateur. Je pense que quelqu'un s'est trompé dans install.ps1

0 votes

Merci pour la solution. J'ai également supprimé l'ancienne référence du fichier du projet et je n'ai eu aucun problème.

32 votes

+1 - Cela me rend vraiment fou quand je dois faire des trucs comme ça. C'est pourquoi j'hésite toujours à cliquer sur mise à jour sur le gestionnaire de paquets NuGet.

32voto

McGaz Points 159

J'ai eu ce problème parce que j'ai mis à jour des packages, qui comprenaient Microsoft.AspNet.WebApi qui a une référence à Newtonsoft.Json 4.5.6 et j'avais déjà la version 6 installée. Il n'était pas assez intelligent pour utiliser la version 6.

Pour le résoudre, après la mise à jour de WebApi, j'ai ouvert Outils > Gestionnaire de package NuGet > Console du Gestionnaire de package et j'ai exécuté :

Update-Package Newtonsoft.Json

Le journal a montré que les versions 6.0.x et 4.5.6 ont été toutes mises à jour vers la dernière version et tout était correct.

J'ai le sentiment que cela va se reproduire.

1 votes

J'avais le problème de plusieurs versions différentes dans ma solution qui contient plusieurs projets, cela a complètement résolu cela et a mis à jour le tout vers la dernière version de JSON.net. Bien joué!

1 votes

C'était la solution la plus simple et la plus directe qui a résolu mon problème. Merci!

21voto

user3167744 Points 79

J'ai trouvé que supprimer cette section du fichier du projet a résolu le problème.

  ..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll

0 votes

Voici. Je suppose que aucun des Newtonsoft.Json.6.0.1 / 6.0.3 / 6.0.5 ne corresponde à la redirection de liaison ''oldVersion="0.0.0.0-6.0.0.0"'' Mais je ne sais pas comment écrire le correct.

0 votes

C'était aussi mon problème, je ne suis pas sûr de ce qui l'a ajouté.

0 votes

A bien fonctionné pour moi. Erreur liée au conflit entre v6,0 et v12,0. La référence du groupe d'éléments était à v11,0. Donc pas sûr de ce qui se passe mais en supprimant le groupe d'éléments semble avoir résolu le problème, du moins en supprimant l'erreur de compilation.

13voto

ZeroDotNet Points 117

Si aucun des éléments ci-dessus ne fonctionne, essayez d'utiliser ceci dans web.config ou app.config:

0 votes

Il s'agit de la meilleure solution pour la situation où vous avez un projet existant utilisant une version supérieure et que vous ajoutez une dépendance qui utilise une version plus ancienne du même package, vous redirigez donc l'ancienne version vers la nouvelle.

0voto

Nick Niebling Points 72

J'ai eu un problème similaire et je voulais juste poster une réponse pour les autres dans ma situation.

J'ai une solution qui fait tourner une application web ASP.NET avec plusieurs autres projets de bibliothèques de classes C#.

Mon application web ASP.NET n'utilisait pas le json, mais d'autres projets le faisaient.

Voici comment j'ai résolu le problème:

  1. J'ai vérifié que tous les projets utilisaient la dernière version (6) en utilisant NuGet Update sur tous les projets qui utilisaient actuellement une version quelconque de json - cela n'a pas résolu le problème
  2. J'ai ajouté json à l'application web en utilisant NuGet - cela a résolu le problème (permettez-moi d'expliquer pourquoi):

L'étape 2 consistait tout d'abord à ajouter des informations de configuration pour le json, suggérant que tous les projets utilisent la dernière version (6) peu importe la version qu'ils ont. Ajouter la liaison d'assembly à Web.Config est très probablement la solution.

Cependant, l'étape 2 a également permis de nettoyer un peu de code hérité. Il s'est avéré que nous avions précédemment utilisé une ancienne version (5) de json dans notre application web et que les dossiers NuGet n'avaient pas été supprimés lorsque la référence a été supprimée (je soupçonne: manuellement). Ajouter le json le plus récent (6) a supprimé les anciens dossiers (json v5). Cela pourrait également faire partie de la solution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X