web-dev-qa-db-fra.com

Comment déboguer les erreurs System.TypeLoadException dans .NET?

Je reçois l'erreur suivante sur l'un de mes assemblys référencés:

Could not load type 'System.Func`2' from Assembly 'MyAssembly, ...

Je serai honnête, je ne pense pas pouvoir me rappeler la dernière fois que j'ai vu une erreur System.TypeLoadException, ou si je l'ai vue, la solution était évidente. Mon premier instinct a été de voir ce que MSDN avait à dire à ce sujet :

TypeLoadException est levée lorsque le Le Common Language Runtime ne trouve pas l’Assemblée, le type dans le Assembly ou ne peut pas charger le type.

Peut-être ai-je mal lu, mais cela signifie-t-il que le CLR ne peut tout simplement pas trouver le type? Cela aurait plus de sens si ce n’était pas quelque chose qui se trouvait dans mscorlib. Tout cela a été construit sur .NET4 avec VS2010, il n'y a donc pas de problème de mono ou autre problème de bibliothèque bizarre. Est-ce que je réfléchis trop? Que se passe-t-il?

25
kertosis

Le problème est que vous avez une incompatibilité dans vos versions. Assurez-vous que tous vos assemblys sont compilés pour .NET 4.

27
Gabe

J'ai reçu cette erreur après refactoring. J'ai eu deux projets compiler en DLL avec le même nom.

Vérifiez le "Nom de l'assembly" dans la section "Application" des propriétés du projet.

24
Ian Warburton

Je ne suis pas sûr de votre scénario spécifique, mais le visualiseur de journal de liaison d'assemblage (fuslogvw) est généralement très utile pour le débogage de problèmes de chargement de types. Plus de détails à http://msdn.Microsoft.com/en-us/library/e74a18c4.aspx

13
Ragesh

Vous pouvez également l'obtenir si vous modifiez l'assembly que vous essayez de charger tout en conservant une ancienne version dans le GAC. Il essaie de charger la version de GAC, pas ce que vous référencez dans votre projet VS.

3
Jay

J'ai eu cette erreur quand j'ai déplacé une classe d'un projet à un autre dans un effort de nettoyage. Après avoir examiné toutes les autres raisons possibles, chacun des projets de ma solution a été rechargé et tout a fonctionné.

  1. Clic droit sur le nom du projet dans l'explorateur de solutions
  2. Sélectionnez Décharger le projet
  3. Clic droit sur le nom du projet dans l'explorateur de solutions
  4. Sélectionnez recharger le projet
1
RWL01

J'ai rencontré cette exception lorsque j'ai refactoré de déplacer certaines classes dans leur propre bibliothèque et que j'ai référencé une version différente de la bibliothèque qu'il tente de charger dans la nouvelle bibliothèque (acquise avec NuGet) que celle que j'avais utilisée dans le projet d'origine.

Le problème qui a été résolu est d'ouvrir le gestionnaire NuGet dans l'ancien projet et de mettre à jour le paquet approprié pour qu'il corresponde à la version que j'utilisais dans ma nouvelle bibliothèque.

0
Aaron Averett

Ce problème peut se produire si différentes versions des packages NuGet sont installées sur différents projets. Pour identifier ces cas,

  1. Cliquez avec le bouton droit sur la solution dans l'Explorateur de solutions et sélectionnez "Gérer les packages de nugets pour la solution".
  2. Sélectionnez l'onglet "Consolider"
  3. Pour tous les packages identifiés, identifiez la version souhaitée et cliquez sur "Installer" pour consolider le package dans cette version.
0
Daniel Elkington