Le projet d’API Web ne fonctionnera pas s’il est déployé – Impossible de charger le fichier ou l’assembly ‘Newtonsoft.Json, Version = 4.5.0.0

Je continue à avoir cette erreur lorsque je déploie mon projet API MVC 5 WEB:

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 système ne peut pas trouver le fichier spécifié.

J’ai suivi cette procédure et réinstallé le package NuGet “Update-Package Newtonsoft.Json-Reeinstall”, mais cela n’a pas fonctionné.

Quelqu’un at-il une idée ici de ce qui pourrait aller de travers?

Vérifiez la référence à la DLL Newtonsoft.json et assurez-vous qu’elle n’a pas automatiquement choisi une version en dehors du dossier de packages de votre solution.

Mon VS 2013 n’arrêtait pas de trouver d’autres copies dans divers /program files (x86)/... Il ignorait même un ajout explicite de la DLL de version du package au projet. J’ai dû creuser plus profondément pour savoir pourquoi cela se produisait …

Enquêtes

J’ai ouvert le fichier .csproj du projet en mode d’édition de texte et recherché toutes les références à Newtonsoft.Json.

Il s’est avéré que je n’en avais pas un, mais deux références à la DLL dans mon fichier csproj (je ne savais pas que c’était possible). Une référence à une version plus ancienne de Newtonsoft.json 5.0.6 (la version actuelle était 5.0.8).

Solution

Plutôt que de supprimer manuellement l’un d’entre eux, j’ai ajouté cet élément manquant à la deuxième inclusion de DLL. J’ai aussi changé le numéro de version en 5.0.8:

  True 

alors il ressemblait maintenant à:

  ..\..\CsQueryTest\packages\Newtonsoft.Json.5.0.8\lib\net45\Newtonsoft.Json.dll True  

Private est le paramètre qui définit “Copier local” pour une référence de DLL. Il a ensuite commencé à inclure la DLL dans la sortie à nouveau!

Je vais déterminer lequel supprimer du fichier csproj, mais pour l’instant, cela peut vous aider si vous avez ce problème. Il semble que la cause en soit peut-être une mise à jour passée de NUGET.

Avez-vous essayé de placer une redirection d’assemblage dans votre configuration Web pour vous assurer que votre application recherche la version correcte:

      

Gérez les packages Nuget pour l’ensemble de la solution, pas uniquement pour le projet. Vous devriez y voir plusieurs versions de Newtonsoft.Json. Choisissez la version la plus basse, puis choisissez Gérer. Décochez toutes les cases sélectionnées et confirmez. Une fois qu’il a été supprimé avec succès, répétez le processus pour toutes les autres versions moins importantes. Lorsque tout ce qui vous rest est une version, la plus récente, du package, cliquez sur Gérer sur celui-ci et vérifiez tous les projets où il manque. Une fois l’installation terminée, vous serez prêt à partir.

La dernière version de Newtonsoft JSON est la version 5.0.8, ce qui est probablement ce que votre réinstallation via NuGet vous a apporté.

Si, lorsque vous cliquez avec le bouton droit de la souris, examinez les propriétés de la référence à la DLL Newtonsoft JSON et que celle-ci indique 5.0.8, vous pouvez simplement définir la version spécifique à False et votre code actuel devrait fonctionner.

Le modèle de projet dans VS2013 a cette habitude vraiment ennuyeuse, il référence Newtonsoft.Json en tant que paquet de nugets HOWEVER sous les propriétés de référence “Copie locale”, il est marqué comme False .

Marquer “Copier Local” sur True

Créer essentiellement un nouveau projet -> deploy ne fonctionne pas sans ce tweak.

Remarque latérale: La mise à niveau de Newtonsoft.Json modifie la valeur de la copie locale en True.