2010-06-22 5 views
0

J'ai un gros logiciel gonflé et je veux ajouter un nouvel élément de l'interface graphique. L'élément GUI a été écrit en utilisant XAML et WPF. J'ai créé l'élément d'interface utilisateur dans un assemblage séparé et le référence dans le gros logiciel. Les deux projets compilés en douceur sous VS2010, mais quand je cours mon application, je reçois un TypeLoadException.Quel type de problème peut provoquer une exception TypeLoadException?

En regardant dans l'exception avec le débogueur, j'obtiens le message suivant: Could not load type GUI.Dashboard from assembly GUI, blah, blah. Il n'y a pas de InnerException ni d'autres détails.

La documentation .GNU indique que ce message s'affiche lorsqu'il n'y a aucun message transmis au constructeur de l'exception. Je suppose que le producteur de l'exception elle-même ne sait pas comment cela s'est passé.

J'ai essayé d'utiliser l'outil Fuslogvw.exe et il m'a effectivement montré quelques dépendances manquantes mineures qui ne sont pas liées. Cependant, il ne peut trouver aucune information sur cette exception.

Quel genre de problème peut éventuellement lancer une exception imprécise comme celle-ci? Est-il un moyen de rendre Fuslogvw.exe au courant pour obtenir quelques détails?

Nous vous remercions à l'avance,

Edit: Je compilé efficacement mon application avec des symboles de débogage. L'exception se produit lorsque j'essaie d'instancier une classe contenant une référence au symbole problématique. à savoir:

class SomeClass 
{ 
    GUI.Dashboard dashboard; 
} 

Et la trace appel ressemble loke ceci:

at SomeClass..ctor() 
at MainClass.Main() din MainClass.cs:line 42 
+0

Si vous avez compilé avec des symboles de débogage, vous devez vérifier la trace de pile de l'exception. Il devrait vous pointer vers la ligne avec le problème. – Reddog

+0

Oui, j'ai la trace de la pile de l'exception, mais ce n'est pas très utile. J'ai édité le poste en conséquence. – slaphappy

+1

Y a-t-il une chance que vous ayez des conflits de nom d'assembly? Ou anciennes versions d'un assembly avec le même nom dans le GAC, ou quelque part? –

Répondre

-2

j'ai finalement trouvé une raison de ce bug: apparemment, dans certains cas, le référencement d'un fichier .exe ne fonctionne pas correctement. Certaines méthodes et classes se chargent bien mais certaines échouent. Dans un autre projet, référencer ce fichier .exe ne pose aucun problème.

Passer au format .dll a résolu tous les problèmes de liaison. Je pense que c'est un bug dans le CLR.

0

questions possibles:

  1. L'assemblage que vous faites référence est x64 et votre consommation est x86 ou AnyCPU sur un CLR 32 bits
  2. Votre assembly consommateur a été compilé avec une version différente de l'assembly référencé

Vous pouvez essayer de use FusLogVW pour activer la journalisation des liaisons d'assemblage et vérifier le fichier journal pour plus d'informations sur les échecs.

+0

J'ai revérifié la configuration et les deux projets sont ciblés pour AnyCPU. En outre, comme je précise dans mon message, j'ai utilisé 'Fuslogvw.exe' pour obtenir des détails sur cette erreur, mais il ne montre même pas, bien qu'il liste tous les autres assemblys chargés par l'application (ceux qui ont réussi et échoué) – slaphappy

0

TypeLoadException est levée lorsque le Common Language Runtime ne trouve pas l'assembly, le type dans l'assembly ou ne peut pas charger le type.

TypeLoadException utilise HRESULT COR_E_TYPELOAD, qui a la valeur 0x80131522.

Pour une liste des valeurs de propriété initiales pour une instance de TypeLoadException, consultez les constructeurs TypeLoadException.

Source: MSDN

0

Juste pour ajouter une autre réponse à ceci:

nous avons eu un client C++ appelant une dll .NET COM. Le développeur de la DLL .NET a renommé l'espace de noms englobant les classes C#, et bien que le progid soit resté le même dans l'attribut de classe et dans le code d'appel C++, le runtime n'a pas pu charger l'objet résultant de cette erreur.

Questions connexes