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: Impossible 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 fichier web.config, je constate qu’une redirection de liaison est en place:
<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>
Quel est exactement ce que l'avertissement conseille.
Comment puis-je résoudre cet avertissement?
Voici les étapes que j'ai utilisées pour résoudre l'avertissement:
J'ai eu ce problème parce que j'ai mis à jour des packages, y compris Microsoft.AspNet.WebApi, qui contient une référence à Newtonsoft.Json 4.5.6 et que j'avais déjà la version 6 installée. Ce n’était pas assez intelligent pour utiliser la version 6.
Pour résoudre ce problème, après la mise à jour WebApi, j'ai ouvert Outils> Gestionnaire de paquets NuGet> Console Pacakge Manager et exécuté:
Update-Package Newtonsoft.Json
Le journal a montré que les versions 6.0.x et 4.5.6 avaient toutes été mises à jour et que tout allait bien.
J'ai le sentiment que cela va revenir.
J'ai trouvé pour supprimer cette section du fichier projet résoudre le problème.
<ItemGroup>
<Reference Include="Newtonsoft.Json">
<HintPath>..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
Si rien de ce qui précède ne fonctionne, essayez 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>
D'accord, j'espère que cela devrait aider à résoudre toutes les (saines) anomalies de référence de l'Assemblée ...
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 comprises entre la version 0.0.0.0 et la version 6.0.0.0.
J'ai mis à jour de Newtonsoft.Json 11.0.1 à 12.0.2. Ouverture du fichier de projet dans Notepad ++ J'ai découvert les deux
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
et
<ItemGroup>
<Reference Include="Newtonsoft.Json">
<HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
</ItemGroup>
J'ai supprimé le groupe d'éléments en enveloppant la référence avec le chemin d'accès à la version 11.0.1.
Ces problèmes peuvent être incroyablement frustrants à trouver. De plus, les développeurs suivent souvent les mêmes étapes que les configurations précédentes du projet. Les configurations précédentes n'ont pas rencontré le problème. Pour une raison quelconque, le fichier de projet est parfois mis à jour de manière incorrecte.
J'espère sincèrement que Microsoft résoudra ces problèmes d'enfer de Visual Studio DLL. Cela se produit beaucoup trop souvent et arrête les progrès jusqu'à ce qu'ils soient corrigés, souvent par essais et erreurs.
Personne n'a mentionné ce qui suit, ce qui à mon sens est la solution correcte:
Accédez au csproj du projet où le nuget est installé et définissez la variable AutoGEneratedBindingRedirects
sur false
.
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
J'ai mis à jour mon paquet et je l'ai même réinstallé - mais je recevais toujours exactement la même erreur que l'OP mentionné. J'ai manuellement modifié la DLL référencée en procédant comme suit.
J'ai supprimé le newtonsoft.json.dll de ma référence, puis j'ai supprimé manuellement le fichier .dll du répertoire bin. Ensuite, j’ai copié manuellement le fichier newtonsoft.json.dll du dossier du paquet Nuget dans le bin du projet, puis j’ai ajouté la référence en naviguant dans le fichier .dll.
Maintenant, mon projet repose à nouveau.
J'ai eu le même problème et je voulais juste poster une réponse pour les autres dans ma situation.
J'ai une solution qui exécute une application Web ASP.NET avec plusieurs autres projets lib de classe C #.
Mon application Web ASP.NET n'utilisait pas json, mais d'autres projets où.
Voici comment je l'ai corrigé:
L'étape 2 consistait tout d'abord à ajouter 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 Assembly à Web.Config est probablement le correctif.
Cependant, l'étape 2 a également nettoyé le code hérité de som. 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 de NuGet n’avaient pas été supprimés lorsque la référence a été supprimée (je suppose: manuellement). Ajout du dernier json (6), supprimé les anciens dossiers (json v5). Cela pourrait également faire partie du correctif.