web-dev-qa-db-fra.com

Qu'est-ce qui pourrait causer une exception System.TypeLoadException dans un test d'unité Visual Studio?

J'ai une bibliothèque de classes C # .NET MyClassLibrary qui compile bien. J'essaie de créer un projet de test unitaire pour celui-ci (à l'aide de Visual Studio Unit Testing Framework, avec Visual Studio 2010). La bibliothèque de classes contient de grandes classes, mais chaque fois que j'exécute le test le plus simple contre la classe la plus simple, j'obtiens l'exception suivante:

La méthode de test MyClassLibraryTest.MyClassLibraryTests.MySimpleClassTest a renvoyé une exception: System.TypeLoadException: impossible de charger le type 'MyClassLibrary.MySimpleClass' dans Assembly 'MyClassLibrary, version = 1.0.0.0, Culture = neutre, PublicKeyToken = null'.

Tous les projets que je traite font partie de la même solution et sont tous compilés pour .NET 4.0. Tout cela est sur un ordinateur Windows 7 64 bits.

Voici la partie étrange: quand je "Run" le test, j'obtiens l'erreur ci-dessus. Mais quand je "Debug" le test, tout se passe bien. Pourquoi?

26
Jay Sullivan

L'assembly MyClassLibrary a été défini sur le mode x86 dans le gestionnaire de configuration. Changer ceci en x64 l'a corrigé. Je souhaite vraiment que Visual Studio détecte cela et le signale comme une erreur moins obscure.

10
Jay Sullivan

Je viens de me cogner la tête contre celui-ci pendant une heure. Le problème était que j'avais un projet de ligne de commande appelé Something.exe, qui utilisait un projet de bibliothèque de classes nommé Something.dll.

33
Amir Abiri

Arrivé à moi aussi. Dans mon cas, le problème est dû au fait que le projet testé et le projet de tests unitaires portent le même nom. Si c'est également votre cas, renommez l'un des projets et renommez le nom du fichier de sortie pour le corriger.

25
Pavel Melnikov

Arrivé à moi aussi. Il est lié à la construction en mode x64, Release et x86. Dans mon cas, j'ai supprimé les dossiers de ma corbeille (debug/release/x86 dans les assemblys de référence et le test unitaire), puis j'ai réexécuté mon test unitaire. VS2010 a quelque peu signalé l'erreur dans la fenêtre de sortie. Cela l'a résolu pour moi. 

4
kepung

Entré à travers cela aujourd'hui et bien que je laisserais mon correctif.

Spécifications: VS 2013/.Net 4.0

Solution: allez dans Menu> Test> Paramètres de test> Architecture de processeur par défaut> X64

 enter image description here

2
Tiago Duarte

J'avais un problème similaire à celui de Trey, mais au lieu de BizTalk, j'ai une solution SharePoint qui utilise également le déploiement GAC. GAC avait une assemblée plus ancienne. Lorsque j'ai retiré l'assemblage GAC en retirant la solution, le test a réussi.

1
Mika Rinkinen

Même message ici, mais je ne pouvais pas non plus déboguer le test.

Dans mon cas, la DLL que je testais a été déployée sur le GAC (une exigence de BizTalk). J'avais créé une nouvelle classe et la testais, mais GAC n'avait-il pas rediffusé la DLL depuis l'ajout de la classe sous test.

1
Trey Mack

Au cas où cela aiderait les autres avec la même erreur (je me rends compte que cela ne répond pas directement à la question reliée à Debug vs); J'ai fusionné dans un projet hérité avec un espace de noms en conflit avec un projet existant, je l'ai donc renommé. J'ai eu cette erreur en essayant de créer un formulaire à partir de ce projet. 

J'ai vérifié que la cible de la plate-forme était la même et j'ai supprimé les répertoires.\Bin\pour assurer une reconstruction complète, supprimé la référence au projet fusionné et ajouté à nouveau, mais toujours la même erreur.

Finalement (!) J'ai vérifié le nom de l'assembly dans les propriétés du projet (clic droit sur le projet, sélectionnez "propriétés", sélectionnez l'onglet "Application") et modifié pour correspondre à l'espace de noms par défaut, et tout va bien maintenant.

0
MartinMlima

Cette erreur s'est produite lors de l'utilisation de NUnit 3 dans VS 2013. Je l'ai résolue en supprimant la référence de l'assembly dans mon projet de test pour l'assembly contenant le type introuvable, puis en rajoutant la référence.

0
JamesFaix

Juste au cas où quelqu'un aurait besoin de cela: J'avais créé un projet de test dans Visual Studio et je m'étais demandé pourquoi certaines classes étaient introuvables, même si Visual Studio me demandait à plusieurs reprises d'ajouter "System.Web" comme référence.

Je l'avais fait et l'erreur continuait de se produire. Le problème pour moi était simple (et j’aurais dû le vérifier auparavant, je le sais): j’avais créé un projet de test à partir d’un modèle créant un projet .NET Core. Après avoir changé pour .NET Framework 4.6.1 et ajouté "System.Web" comme référence, tout a bien fonctionné.

0
A. Hoffmann

Cela m'est arrivé lorsque j'essayais d'ajouter un projet test avec le même nom de projet principal.

Mon nom de projet principal était: Calculator.OperationsManagermy Le nom du projet de test était: Calculator.OperationsManager.

j'ai changé le nom du projet de test en tant que Calculator.OperationsManager.Test et tout s'est bien passé.

0
Wahap