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:
.
{
"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": {}
}
}
.
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace UnitTestProject1
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var conman = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager;
}
}
}
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
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 lequelnuget.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.
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:
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.