7
votes

Impossible de charger le fichier ou l'assemblage 'Newtonsoft.json, version = 6.0.0.0 dans le test de l'unité

J'essaie de tester un projet à tester un projet qui a des dépendances sur JSON.net et Signalr. Pour une raison quelconque, je suis incapable de faire fonctionner de nombreux tests d'unités. Depuis que j'ai mis à jour Json.net à la version 9.0.0, je reçois une exception indiquant:

Une exception de type 'system.io.fileloadexception' a eu lieu dans mscorlib.dll mais n'a pas été traitée dans le code de l'utilisateur

Informations supplémentaires: Impossible de charger le fichier ou l'assemblage 'Newtonsoft.json, version = 6.0.0.0, Culture = neutre, PublickeyToken = 30ad4fe6b2a6aeed' ou une de ses dépendances. La définition manifeste de l'Assemblée localisée ne correspond pas à la référence de montage. (Exception de HRESULT: 0x80131040)


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

  • Utilisez la mise à jour Visual Studio 2015 3
  • Allez à Fichier-> Nouveau-> Projet
  • Sélectionnez Templates-> Visual C # -> Test -> Projet de test de l'unité
  • Cliquez avec le bouton droit de la souris sur le projet, sélectionnez Propriétés et modifiez le cadre sur .NET Framework 4.6.1
  • Créez un nouveau fichier à la racine du projet nommé Project.json
  • Définissez le contenu de Project.json sur les éléments suivants:

    . xxx

    • Changer Unitest1.cs (fourni par l'échafaudage) aux suivants:

      . xxx

      • Fermer et réouverture Visual Studio (Ceci est nécessaire pour charger les dépendances à l'aide de Project.json)
      • Reconstruisez le projet
      • Sélectionnez la méthode de test et appuyez sur Ctrl + R + T

        L'erreur doit apparaître.

        Je ne sais pas comment résoudre ce problème. J'ai essayé de jouer avec les liaisons contraignantes, et rien n'a fait disparaître l'erreur. La réinstallation de l'emballage n'a aucun sens, car je peux reproduire cela avec un projet propre.

        Ma peur est que je devais revenir à une version antérieure de JSON.NET


8 commentaires

C'est une version Version de Json.net. Ajoutez l'ancienne version à votre projet de test ou mettez à niveau tous vos projets pour utiliser la même version. Avez-vous vérifié les onglets "Mettre à jour" ou "Consolidate" dans le gestionnaire de packages Nuget?


Vérifiez également les références directes à JSON.NET, c'est-à-dire pas via Nuget


@PanagiIkanavos Je reproduisez cela avec un projet propre dans une nouvelle solution qui n'a absolument rien que ce test d'unité.


Les modèles ASP.NET ne contiennent pas les dernières références JSON.NET. L'erreur se produit car l'application Web fait référence à l'ancienne version json.net. Supprimez toutes les références non nugettes existantes et ajoutez le package à tous les projets. Je avez rencontré les mêmes problèmes dans le passé


Il est également possible que le modèle utilise une référence GAC pour JSON.NET. C'est pourquoi vous devriez vérifier les références existantes, alors assurez-vous d'utiliser Nuget uniquement


Vous avez un fichier de projet.json - Je pensais que cela n'était utilisé que dans les versions de pré-libération de Visual Studio et ils sont retournés dans des projets .CSPROJ à RTM.


SignalR 2.2.1 Références toujours 6.0.4 JSON.NET - Nuget .org / packages / microsoft.aspnet.signalr.core / 2.2.1 - On dirait que vous pourriez avoir besoin de redirections contraignantes pour le faire fonctionner.


Ajouter Assembly Rediriger dans le fichier de test APP.Config pour pointer vers V9.


3 Réponses :


1
votes

Parfois, NEWTONSOFT.JSON (inutile) se déroule dans le cache de l'Assemblée mondiale (GAC) et il s'agumront de la version que vous demandez que si elle est fournie localement dans ce répertoire. Vérifiez les références de votre projet de test et trouvez la référence à newtonsoft.json:

  • Assurez-vous que la valeur de référence Copie locale est définie sur true .
  • Assurez-vous que la référence est pointée sur la DLL de Nuge correcte dans le dossier de votre solution / packages plutôt que quelque part ailleurs.

5 commentaires

La référence n'a pas de valeur "Copie locale". En fait, il n'a pas de propriétés du tout. Il semble que cela ait quelque chose à voir avec l'utilisation du projet.json pour la définir comme une dépendance.


La référence a donc une icône de nuget alors, non? Y a-t-il un nouveautonsoft.json.dll dans le répertoire de test de l'unité elle-même? Si tel est le cas, quelle version indique-t-elle si vous ouvrez ses propriétés dans l'explorateur de fichiers Windows? Si vous n'êtes pas vraiment pas vraiment sur la mise à jour 3, vous pouvez essayer d'ajouter true sur un nouveau groupe de propriété dans votre fichier .csproj, mais censé être corrigé avec la mise à jour 1.


Newtonsoft.dll dans le répertoire bin / débogage a une version de fichier de 9.0.1.19813


Et au cas où vous aurez des questions supplémentaires, j'ai fourni les étapes complètes pour reproduire ce problème avec un projet propre, afin que vous puissiez faire l'expérience de la question.


Droite, j'ai suivi ceux et je n'avais aucun incident. À ce stade, il ressemble à votre répertoire de travail de votre test de test n'est pas vraiment le dossier BIN et que vous tirez toujours à partir du GAC ou des redirections contraignantes ne fonctionnent pas. La tâche facile à faire est de le supprimer de votre GAC, mais si cela sort aux clients, cela ne sera évidemment pas approprié.




0
votes

Il semble qu'il existe une divergence entre les assemblages de vos projets (projet de test unitaire et projet cible).

J'ai déjà fait face à un problème similaire et la solution consistait à consolider les versions dans une bibliothèque. Vous pouvez le faire en cliquant avec le bouton droit de la souris sur votre solution, puis "Gérer les paquets Nuget pour la solution". Cela vous permettra de choisir la version que vous souhaitez utiliser pour les projets sous votre solution qui dépend de cette ou une autre bibliothèque.


0 commentaires