web-dev-qa-db-fra.com

Le projet d'API Web Visual Studio 2012 ne s'exécute pas - impossible de trouver Newtonsoft.Json

Après avoir exécuté une solution propre et reconstruit, mon projet d'API Web MVC 4 cesse de fonctionner. Il ne peut pas trouver Newtonsoft.Json.

Je sais que MS utilise cela en tant que sérialiseur JSON par défaut, mais il ne figure pas dans la liste de références du projet et je ne peux pas l'ajouter à partir de NuGet car il est déjà installé.

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

Trace complète de la pile:

[FileNotFoundException: 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é.]
MvcWebRole1.WebApiApplication.Application_Error () dans d:\Data\Source Projets contrôlés\georace\georace\Server\GeoRaceServer\MvcWebRole1\Global.asax.cs: 70

[HttpException (0x80004005): 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é.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (contexte HttpContext, application HttpApplication) +12838633
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, Contexte HttpContext, Gestionnaires MethodInfo []) +175
System.Web.HttpApplication.InitSpecial (état HttpApplicationState, gestionnaires MethodInfo [], IntPtr appContext, contexte HttpContext) +304
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, Contexte HttpContext) +404
System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr appContext) +475

[HttpException (0x80004005): 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é.]

59
BlackSpy

Ok - j'ai trouvé un travail autour de moi, poster au cas où quelqu'un d'autre se laisserait berner par ce bogue MS. Le problème est que vous ne pouvez pas ajouter de référence NuGet car elle est déjà incluse dans les packages par défaut. Alors...

  1. Ouvrez packages.config
  2. Supprimez l'entrée Newtonsoft.Json.
  3. Enregistrer et construire
  4. Ajoutez de nouveau Newtonsoft.Json à partir de NuGet.
  5. Construire et exécuter
81
BlackSpy

Pour tout paquet déjà installé que vous souhaitez réinstaller par NuGet, tapez simplement la commande suivante dans Console du gestionnaire de package:

Mise à jour dans tout projet:

Update-Package Newtonsoft.Json -Reinstall

Mise à jour dans un projet spécifique

Update-Package Newtonsoft.Json -Reinstall -Project My.App
47
Rubens Mariuzzo

Pour moi, la seule chose qui a corrigé cette erreur a été d'ajouter la section manquante à mon fichier web.config, que j'ai obtenue de cette réponse ici: https://stackoverflow.com/a/20414714/94078

Voici ce que je devais ajouter:

  <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>
35
ClearCloud8

J'ai combiné quelques-unes des options indiquées par les autres SO contributeurs, plus une nouvelle.

Premièrement, il s'avère que Nuget 2.1 avait quelques problèmes, et ce problème a été enregistré dans un bogue et a été corrigé dans la version 2.2.2. Voir ici: https://nuget.codeplex.com/workitem/305

Alors, j'ai fait les étapes suivantes:

  1. Mise à jour de la version de Nuget vers la version 2.2.2 selon le lien.
  2. Suppression de toutes les références à Json dans mon projet en effectuant une désinstallation à partir de NUget (clic droit sur le projet et trouver le package, puis désinstallation (même si cela n'a pas été fait)
  3. Physiquement supprimé les fichiers du package à partir de l'ordinateur. J'ai trouvé les fichiers de paquet ici: //projectdir/packages/Newtonsoft.JSON
  4. Suppression du fichier packages.config du répertoire physique (//projectname/packages.config)
  5. Une fois que tout cela était terminé, j'ai rajouté Newtonsoft via Nuget, puis j'ai reconstruit, et cela a fonctionné.
4
MunsterMan

J'ai eu le même problème (dans VS2012). Aucune réponse ne m'a aidé. Finalement je l'ai résolu par ceci:

1) Allez à OUTILS -> EXTENSIONS ET MISES À JOUR ici mettez à jour (ou installez) "Gestionnaire de paquets NuGet" puis allez à "En ligne" et installez "Ajout rapide NuGet" et "Références NuGet"

2) après avoir tout installé 1) dans votre projet, cliquez avec le bouton droit de la souris sur "Références" et choisissez "Gérer les paquets Nuget" dans "Paquets installés", recherchez Json.NET. Cliquez sur Désinstaller - vous ne pouvez pas faire cela maintenant, mais cela vous indique ce que vous devez d'abord désinstaller (certains ASP Web Api)). Désinstallez-les tous et essayez à nouveau de désinstaller "Json.NET". Maintenant, allez dans "En ligne" et installez "Json.NET", "Bibliothèques clientes ASP.NET WEB API" et "OData client ASP.NET WEB API".

3) dans Global.asax, supprimez la ligne "WebApiConfig.Register (GlobalConfiguration.Configuration);"

construire la solution et tout devrait être ok .. J'espère que cela peut aider quelqu'un :) gl

4
TomT

Vérifiez si vous aviez une référence "ancien style" (pré-nuget) à JSON.NET pointant vers une copie locale obsolète intégrée dans votre projet.

J'ai eu un vieux Reference\Lib\JSON.NET qui était dans mon chemin de référence et qui a la priorité.

Vérifiez que la page de propriétés JSON.NET pointe vers la version de package Nuget attendue.

J'ai eu ce problème sur une version de Team Server déployée en direct. Je devais réparer ma solution d'origine et faire un build propre pour m'assurer que l'ancien Reference\Lib\ DLL n’a pas été récupéré.

3
Simon_Weaver

J'avais le même FileNotFoundException et il s'avère que j'ai déjà la référence à Newtonsoft.Json sur mon projet, MAIS la propriété "Copier local" n'a pas été définie sur VRAI. Il suffit de le définir sur TRUE pour que la dll soit copiée dans le répertoire de sortie si c'est également votre cas.

1
jfrowies

La cause de mon problème avec Newtonsoft.json était légèrement différente. J'avais développé une application Windows construite contre .Net 4.5. J'ai découvert par la suite que l'environnement du client ne supportait que .Net 4.0. J'avais copié la solution dans une nouvelle zone pour préserver le travail .Net 4.5 et changé les propriétés de la solution en Microsoft.Net 4.0. J'ai eu l'erreur que Newtonsoft.json était introuvable et qu'il me manquait une référence.

J'ai suivi les procédures indiquées ci-dessus pour supprimer le package.config; supprimer Newtonsoft.json; s'assurer que Newtonsoft.json a été supprimé du répertoire\packages; puis réinstallez Newtonsoft.json à partir de NuGet. J'ai pu compiler et exécuter l'application avec .Net 4.0

Avant cela, le fichier packages.config montrait que la version de .Net ciblée par Newtonsoft.json était .Net 4.5. Supprimer et ajouter le fichier Newtonsoft.json a maintenant la cible sous la forme .Net 4.0.

1
David

J'ai testé tout ce qui a été dit ici et rien n'a fonctionné. Dans mon cas, j'avais un dossier de chemin comme celui-ci.

  • # Projets/Web/App/...

Le # la cause de mon problème. J'ai enlevé le # et a bien fonctionné.

1
mvurban

Dans mon cas, j'ai vérifié le projet d'un collègue qui a en quelque sorte altéré ma référence Newtonsoft.Json - j'ai donc dû l'enlever. Faites un clic droit sur le projet -> Gérer les paquets NuGet. Sur le côté gauche, cliquez sur "Packages installés", puis sélectionnez Json.NET et désinstallez-le. Dans mon cas, je devais également désinstaller d'autres packages dépendants (API Web Microsoft ASP.Net et autres). Choisissez "En ligne" sur le côté gauche et recherchez Json.Net, réinstallez-le.

1
Tony D

J'ai fait cela par erreur, et tout s'est bien réglé.

Ayant démarré un nouveau projet VS 2012, j'ai utilisé NuGet pour installer Newtonsoft.JSON, la version 4.5.6 étant déjà installée, et j'ai été impressionné de constater que celui-ci avait été désinstallé et installé 4.5.10.

Doux.

0
zeristor

Vous pouvez essayer d'installer le package SocialAuth.Net avec l'indicateur –IgnoreDependencies, puis d'installer les dépendances manuellement et en vous assurant que vous n'installez que la dernière version de la bibliothèque Json.Net.

Ensuite, au moment de l'exécution, le package SocialAuth.Net respecterait la redirection d'assemblage et chargerait Json.Net (v4.5) à la place de l'ancienne version.

0
Nikunj B. Balar

J'ai eu le même problème dans VS2012 Express et j'ai réussi à l'installer de

OUTILS -> Gestionnaire de paquets NuGet -> Gérer les paquets NuGet pour la solution

Là j'ai trouvé et installé Newtonsoft Json. Il n'a été installé dans aucun des projets de solution à ce moment-là.

0
meJustAndrew