3 votes

Impossible de charger le fichier ou l'assemblage 'Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' ou l'une de ses dépendances.

Cette erreur me rend fou.

J'ai installé le SendGrid NuGet dans une de mes bibliothèques de classe nommée BaseServices qui a une dépendance envers Newtonsoft.Json v7.0.1 Il l'installe donc dans mon dossier de paquets et y fait référence.

Dans la bibliothèque de classes, j'ai cette redirection de liaison :

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
</dependentAssembly>

Dans le web.config de l'application ASP.NET MVC, c'est-à-dire l'application cliente qui utilise ma bibliothèque de classes, j'ai une redirection de liaison d'assemblage pour les versions inférieures à la v6 afin de pointer vers la v6 de la bibliothèque de classes. Newtonsoft.Json bibliothèque comme ça :

<dependentAssembly>
 <assemblyIdentity name="Newtonsoft.Json" culture="neutral"
              publicKeyToken="30ad4fe6b2a6aeed" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

Lorsque j'exécute mon code d'envoi d'e-mail qui se trouve dans la section BaseServices j'obtiens cette erreur :

Le thread 0x1a4c a quitté avec le code 0 (0x0). System.IO.FileLoadException : Impossible de charger le fichier ou l'assemblage 'Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' ou l'une de ses dépendances. La définition du manifeste de l'assemblage situé à l'adresse l'assemblage localisé ne correspond pas à la référence de l'assemblage. référence. (Exception provenant de HRESULT : 0x80131040) Nom de fichier : 'Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' dans SendGrid.Helpers.Mail.Mail.Get() at BaseServices.EmailService.SendAsync(EmailMessage message) dans MonDossier \BaseServices\EmailService.cs :ligne 39

\=== Informations sur l'état de la liaison préalable === LOG : DisplayName = Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed (Entièrement spécifié) LOG : Appbase = file:///MonDossier/Web/ LOG : Initial PrivatePath = MonDossier \Web\bin Assemblage appelant : SendGrid, Version=7.0.3.0, Culture=neutral, PublicKeyToken=4f047e93159395ca. === LOG : Ce bind démarre dans le contexte de chargement par défaut. LOG : Utilisation du fichier de configuration de l'application : MyFolder \Web\web.config LOG : Utilisation de fichier de configuration de l'hôte : C:\Users\computer\Documents\IISExpress\config\aspnet.config LOG : Utilisation de fichier de configuration de la machine à partir de C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. LOG : Référence post-politique : Newtonsoft.Json, Version=7.0.0.0, Culture=neutre, PublicKeyToken=30ad4fe6b2a6aeed LOG : Tentative de téléchargement de la nouvelle URL file:///C:/Users/computer/AppData/Local/Temp/Temporary ASP.NET Files/Root/ef9cacdf/e639667a/Newtonsoft.Json.DLL. LOG : Tentative de téléchargement de la nouvelle URL file:///C:/Users/computer/AppData/Local/Temp/Temporary ASP.NET Files/Root/ef9cacdf/e639667a/Newtonsoft.Json/Newtonsoft.Json.DLL. LOG : Tentative de téléchargement de la nouvelle URL file:///MyFolder/Web/bin/Newtonsoft.Json.DLL. WRN : Comparaison des fichiers nom d'assemblage a donné lieu à une discordance : Major Version ERR : Failed to de l'assemblage (hr = 0x80131040). Sondage terminé.

10voto

Mahendra Points 126

Vous avez 2 versions différentes de la bibliothèque JSON.NET dans votre solution. Pour résoudre ce problème, vous devez les mettre à niveau vers la dernière version. Suivez ces étapes :

  1. Ouvrir l'explorateur de solutions
  2. Cliquez à droite sur le nom de la solution
  3. Sélectionnez Gérer les paquets Nuget pour la solution
  4. Sélectionnez Mises à jour dans le menu
  5. Mise à jour du paquet JSON.NET

Cela résoudra votre problème.

1voto

Big Daddy Points 2147

Cette folie m'est arrivée assez souvent. Vous devez vous assurer que la version de l'assemblage Newtonsoft.Json est cohérente à ces endroits :

  • Références du projet (version dll)
  • Web.config
  • Packages.config

0voto

El_T Points 1

J'ai eu le même message d'exception et je suis tombé sur ce fil de discussion. J'espère que ce qui suit aidera quelqu'un d'autre.

Ma solution contient plusieurs projets. L'un de ces projets utilise le client Microsoft.AspNet.WebApi.Client. L'une de ses dépendances est la bibliothèque Newtsonsoft.Json.

Toutefois, la version de la bibliothèque que le client Microsoft.AspNet.WebApi.Client exploite est la version 6.0.

Le problème est alors qu'à un moment donné, le développeur est informé des mises à jour. Nous mettons donc à jour la bibliothèque JSON. Tout va bien, non ?

Nous ajoutons ensuite un projet d'installation qui crée un installateur .msi. Ahhhh... dans ce .msi, nous voyons maintenant deux versions de la bibliothèque JSON. Huh ? Comment cela est-il arrivé ? Bien sûr, nous supprimons l'ancienne.

Puis, à un moment donné, pendant les tests, nous recevons le message d'exception concernant la version 6.0. Mais, maintenant, en parcourant les fichiers .config, etc., nous voyons des références à la version 11.0+.

J'ai vu plusieurs solutions ici dans différents fils de discussion. Certains parlent de désinstallations forcées de la bibliothèque et de la suppression des références XML dans ces fichiers .config.

Ce qui a fonctionné pour moi, c'est de désinstaller le client Microsoft.AspNet.WebApi.Client ainsi que la bibliothèque JSON et de réinstaller le client Microsoft.AspNet.WebApi.Client. Cette dernière réinstalle la dépendance appropriée.

Leçon : si vous voyez plusieurs versions d'une .dll dans votre projet d'installation, assurez-vous de savoir laquelle doit être supprimée.

Ce qui est déroutant, cependant, c'est qu'après avoir mis à jour la bibliothèque, en mode débogage, la solution continue de fonctionner sans incident. Ce n'est que lorsque j'ai voulu tester le déploiement que j'ai rencontré le problème.

De plus, la mise à niveau, comme le suggère la première réponse, n'était pas la solution pour moi.

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