web-dev-qa-db-fra.com

Impossible de charger le fichier ou l'assembly 'Newtonsoft.Json, Version = 6.0.0.0 dans le test unitaire

J'essaie de tester un projet qui a des dépendances sur Json.Net et SignalR. Pour une raison quelconque, je ne parviens pas à exécuter plusieurs de ces tests unitaires. Depuis que j'ai mis à jour Json.Net vers la version 9.0.0, je reçois une exception qui dit:

Une exception de type 'System.IO.FileLoadException' s'est produite dans mscorlib.dll mais n'a pas été gérée dans le code utilisateur

Informations complémentaires: Impossible de charger le fichier ou l'assembly 'Newtonsoft.Json, Version = 6.0.0.0, Culture = neutre, PublicKeyToken = 30ad4fe6b2a6aeed' ou l'une de ses dépendances. La définition du manifeste de l'Assemblée localisée ne correspond pas à la référence de l'Assemblée. (Exception de HRESULT: 0x80131040) 


Je peux reproduire ce problème avec un projet propre. Voici les étapes à suivre pour reproduire:

  • Utiliser Visual Studio 2015 Update 3 
  • Allez dans Fichier-> Nouveau-> Projet
  • Sélectionnez Modèles-> Visual C # -> Test -> Projet de test unitaire
  • Cliquez avec le bouton droit sur le projet, sélectionnez les propriétés et modifiez le cadre en .NET Framework 4.6.1
  • créer un nouveau fichier à la racine du projet nommé project.json
  • Définissez le contenu de project.json comme suit: 

.

{
  "dependencies": {
    "Microsoft.AspNet.SignalR.Client": "2.2.1",
    "Microsoft.AspNet.SignalR.Core": "2.2.1",
    "Newtonsoft.Json": "9.0.1"
  },
  "frameworks": {
    "net451": {},
    "net461": {}
  },
  "runtimes": {
    "win": {},
    "win-x86": {},
    "win-x64": {}
  }
}
  • Modifiez UnitTest1.cs (fourni par l’échafaudage) par ce qui suit:

.

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTestProject1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            var conman = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager;
        }
    }
}
  • Fermez et rouvrez visual studio (il est nécessaire de charger les dépendances à l'aide de project.json)
  • Reconstruire le projet
  • sélectionnez la méthode de test et appuyez sur CTRL + R + T

L'erreur devrait apparaître.

Je ne sais pas comment résoudre ce problème. J'ai essayé de jouer avec la liaison bindingRedirects, et rien n'a fait disparaître l'erreur. Réinstaller le paquet n'a aucun sens, car je peux le reproduire avec un projet propre. 

Ma crainte est que je devrai revenir à une version antérieure de Json.Net

6
Sam I am

Donc, j'ai le projet de test à exécuter. Je ne suis pas tout à fait sûr de ce qui a précisément fonctionné, depuis que j'ai essayé plusieurs choses, mais je suppose que c'était une combinaison de ces deux choses:

effacer le cache de nuget comme décrit ici: Comment effacer le cache de paquet NuGet en ligne de commande?

Tout d’abord, téléchargez l’outil en ligne de commande Nuget à partir de ici .

Ensuite, ouvrez une commande Invite et cd dans le répertoire dans lequel nuget.exe a été téléchargé.
...
Vous pouvez effacer toutes les caches avec cette commande:
nuget locals all -clear

copier les bindingredirects à partir d'un projet où j'ai utilisé le paradigme packages.config au lieu de project.json.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Mise à jour: J'avais d'autres projets, y compris des projets UWP, qui rencontraient également des problèmes de chargement de Newtonsoft.Json. En fin de compte, je suis revenu à la version 7.0 et tous mes problèmes ont évolué. Morale de l'histoire: Essayer de résoudre les dépendances est une douleur.

Update: Après des expériences similaires dans d'autres projets. Il semble que le fait de nettoyer de VS à nettoyer ne nettoie pas toujours complètement le dossier bin\debug, et la suppression manuelle de ce dossier semble aider.

4
Sam I am

Parfois, Newtonsoft.Json (sans aide) se termine dans le GAC (Global Assembly Cache) et annule la version que vous demandez, sauf si elle est fournie localement dans ce répertoire. Vérifiez les références de votre projet de test et recherchez la référence à Newtonsoft.Json:

  • Assurez-vous que la valeur Copy Local de la référence est définie sur True .
  • Assurez-vous que la référence est dirigée vers le NuGet DLL correct dans le dossier/packages de votre solution plutôt qu'ailleurs.
1
UtopiaLtd

Il semble y avoir une divergence entre les assemblys de vos projets (projet de test unitaire et projet cible).

J'ai déjà eu à faire face à un problème similaire auparavant et la solution consistait à regrouper les versions dans une bibliothèque. quelle version vous souhaitez utiliser pour les projets de votre solution qui dépend de cette bibliothèque ou de toute autre.

0