Comment puis-je résoudre les conflits de version d’assemblage avec JSON.NET après la mise à jour des 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 mis à jour tous les packages NuGet. Lorsque je construis le projet, je reçois l’avertissement suivant:

warning MSB3243: Pas de 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 = neutral, PublicKeyToken = 30ad4fe6b2a6aeed”.

Lorsque je vérifie le fichier web.config, je constate qu’une redirection est en place:

    

Ce qui est exactement ce que l’avertissement conseille.

Comment puis-je corriger cet avertissement?

    Voici les étapes que j’ai utilisées pour corriger l’avertissement:

    • Décharger le projet dans VS
    • Modifier le fichier .csproj
    • Rechercher toutes les références à l’assemblage Newtonsoft.Json
      • Trouvé deux, un à v6 et un à v5
      • Remplacer la référence à v5 par v6
    • Reload project
    • Construire et noter l’échec d’une référence d’assemblage
    • Voir les références et voir qu’il y en a maintenant deux à Newtonsoft.Json. Supprimez celui qui ne parvient pas à résoudre.
    • Reconstruire – pas d’avertissement

    J’ai eu ce problème parce que j’ai mis à jour les paquets, 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. Ce n’était pas assez intelligent pour utiliser la version 6.

    Pour le résoudre, après la mise à jour de WebApi, j’ai ouvert le menu Outils> NuGet Package Manager> Pacakge Manager Console et exécuté:

      Update-Package Newtonsoft.Json 

    Le journal a montré que les versions 6.0.x et 4.5.6 étaient toutes mises à jour et que tout allait bien.

    J’ai le sentiment que cela reviendra.

    J’ai trouvé à supprimer cette section du fichier de projet pour résoudre le problème.

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

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

             

    La solution finale aux erreurs de redirection d’assembly

    D’accord, j’espère que cela devrait aider à résoudre les écarts de référence (sains) de l’assemblage …

    1. Vérifiez l’erreur.

    Surfez sur le site

    1. Vérifiez web.config après la redirection de l’assembly. Créez-en un s’il n’existe pas.

    Redirection d'assembly web.config existante

    1. Cliquez avec le bouton droit sur la référence de l’assemblage et choisissez Propriétés.

    Assemblée dans la liste de référence, dans le projet concerné

    1. Vérifiez la version (pas la version d’exécution) dans le tableau Propriétés. Bien reçu.

    Tableau des propriétés montrant la version de l'assemblage

    1. Coller dans l’atsortingbut newVersion.

    redirection d'assembly web.config avec newVersion mis à jour

    1. Pour plus de commodité, remplacez la dernière partie de l’ancienne version par quelque chose de haut, de rond et d’imaginaire.

    redirection d'assembly web.config avec oldVersion mis à jour

    Réjouir.

    Rappelez-vous qu’avec la redirection de liaison

    oldVersion = “0.0.0.0-6.0.0.0”

    Vous dites que les anciennes versions de la DLL sont entre la version 0.0.0.0 et la version 6.0.0.0.

    J’avais le même problème et je voulais juste afficher une réponse pour les autres dans ma situation.

    J’ai une solution exécutant une application Web ASP.NET avec plusieurs autres projets de bibliothèque de classes C #.

    Mon application Web ASP.NET n’utilisait pas json, mais d’autres projets.

    Voici comment je l’ai corrigé:

    1. Je me suis assuré que tous les projets utilisant la dernière version (6) utilisant NuGet Update sur tous les projets utilisant actuellement une version de json – cela ne résout pas le problème
    2. J’ai ajouté json à l’application Web à l’aide de NuGet – le problème a été résolu (permettez-moi de vous expliquer pourquoi):

    L’étape 2 consistait tout d’abord à append des informations de configuration pour json, suggérant que tous les projets utilisent la dernière version (6), quelle que soit leur version. L’ajout de la liaison d’assembly à Web.Config est probablement le correctif.

    Cependant, l’étape 2 a également permis de nettoyer le code hérité. Il s’est avéré que nous avions déjà utilisé une ancienne version (5) de json dans notre application Web et que les dossiers de NuGet n’étaient pas supprimés lorsque la référence était (je suppose: manuellement) supprimée. En ajoutant le dernier fichier json (6), vous avez supprimé les anciens dossiers (json v5). Cela pourrait aussi faire partie du correctif.

    J’ai mis à jour mon paquet et même je l’ai réinstallé – mais j’obtiens toujours la même erreur que celle mentionnée dans l’OP. J’ai modifié manuellement le dll référencé en procédant comme suit.

    J’ai supprimé le fichier newtonsoft.json.dll de ma référence, puis supprimé manuellement le fichier .dll du répertoire bin directoy. Ensuite, j’ai copié manuellement le fichier newtonsoft.json.dll à partir du dossier du package nuget dans la corbeille du projet, puis ajouté la référence en naviguant dans le fichier .dll.

    Maintenant, mon projet se construit à nouveau.