Qu'est-ce qui pourrait causer un System.TypeLoadException?
Je suis en train de développer, avec VS2008 à l'aide de C#, une application pour Honeywell Dolphin 6100, un ordinateur portable avec un lecteur de code-barres qui utilise Windows CE 5.0 comme OS.
Je veux ajouter une fonctionnalité qui permet d'envoyer des fichiers à partir du périphérique local vers le serveur distant. J'ai trouvé la librairie "Tamir.SharpSSH " qui peut certifier que cela. J'ai testé le code sur une application de console et sur normal application windows forms et il fonctionne parfaitement. Mais quand j'ai essayé d'utiliser le même code sur l'winCE appareil, je reçois un TypeLoadException et j'ai le message d'erreur :
N'a pas pu charger le " type de Tamir.SharpSsh.SshTransferProtocolBase " à partir de l'assembly 'Tamir.SharpSSH, Version=1.1.1.13, Culture=neutral, PublicKeyToken=null".
le code que je vais utiliser est comme ci-dessous :
SshTransferProtocolBase sshCp = new Scp(Tools.GlobalVarMeth.hostName, Tools.GlobalVarMeth.serverUserName);
sshCp.Password = Tools.GlobalVarMeth.serverUserpassword;
sshCp.Connect();
string localFile = Tools.GlobalVarMeth.applicationPath + "/" + fileName + ".csv";
string remoteFile = Tools.GlobalVarMeth.serverRemoteFilePath + "/" + fileName + ".csv";
sshCp.Put(localFile, remoteFile);
sshCp.Close();
Quelqu'un a une idée sur ce point ? Je serai vraiment reconnaissante !!!
source d'informationauteur J.M.J
Vous devez vous connecter pour publier un commentaire.
Il pourrait être n'importe quel nombre de choses. Les causes probables sont:
Votre meilleur pari est d'utiliser la Fusion de la visionneuse du journal pour aider à diagnostiquer. La Documentation est ici:
http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs. 110).aspx
(FYI "Fusion" était le nom de code de l'équipe qui a conçu le chargement de l'assemblage du système; il est quelque peu regrettable que le nom de code a fini dans le nom de fichier du produit expédié. La chose doit avoir été appelé "AssemblyBindingLogViewer.exe" ou quelque chose de ce genre.)
La réponse d'Eric Lippert décrit parfaitement la situation.
Je veux juste ajouter une réponse rapide à propos d'un cas qui ne sont généralement pas couverts par les pages d'aide concernant cette exception.
J'ai créé un rapide & sale projet de test pour quelques qui est open-source (Akka.Net, pour le nommer) et j'ai le nom du projet lui-même "Akka".
Parfaitement construit, mais au démarrage, il la jette en charge selon le type de l'exception concernant une catégorie dans Akka.dll.
C'est juste parce que mon exécutable (akka.exe) et la référence (akka.dll) ont le même nom. Il m'a fallu quelques minutes pour comprendre le présent (j'ai commencé par des choses telles que la copie locale, la plate-forme cible, version exacte... etc).
C'est quelque chose de très stupide, mais pas de force la première chose que vous pensez (surtout depuis que j'ai utilisé nuget pour les dépendances), j'ai donc pensé qu'il pourrait être intéressant de le partager : vous rencontrerez TypeLoadException si votre EXE et une dépendance qui ont le même nom.
Cela pourrait être causé par un certain nombre de choses, MSDN a dit:
Donc, il est clair qu'un type ne peut pas être trouvé, l'assemblée est manquant, le type est absent ou il y a un clash entre les configurations de runtime.
Parfois, le problème peut se produire parce que le montage vous faites référence est un autre type de plate-forme (32 bits /64 bits, etc) en plus de celui que vous consommez.
Je recommande la capture de l'exception et de l'examiner plus en détail afin d'identifier ce qu'il éprouve de la difficulté avec.
Pour faire suite à mon précédent information
Parfois, je l'ai vu cette question parce que (pour une raison ou une autre) d'un assemblage peut pas être résolu, même si il est référencé et chargé.
En général, je le voit quand domaine d'application les frontières sont impliqués.
Un moyen que j'ai trouvé que, parfois, le problème est résolu (mais seulement si l'assemblée est déjà dans le domaine d'application) est ce petit extrait de code:
Comme je l'ai dit, je vois ce problème lorsque domaines d'application s'impliquer et cela ne semble pas résoudre lorsque l'assemblée est en effet déjà référencé et chargé. Je n'ai aucune idée pourquoi le cadre ne parvient pas à résoudre la référence elle-même.
Cela a failli m'a rendu fou...
Je ne sais pas comment j'ai réussi, mais pour une raison que j'avais une vieille version de la DLL dans le GAC. Essayez de regarder pour un vieux assemblée et le retirer.
Bonne chance!
Vous pouvez obtenir le chargeur de fichiers journaux de la .NET Compact Framework en permettant à certains paramètres dans le registre. Le La puissance des Jouets pour .NET Compact Framework disposent d'un outil appelé NETCFLogging, qui définit les valeurs de registre pour vous.
Les valeurs de registre sont documentées ici:
http://msdn.microsoft.com/en-us/library/ms229650(v=VS.90).aspx
Dans mon cas, le problème était que j'avais deux projets qui utilise les mêmes bibliothèques dans une solution. J'ai mis à jour les Dll uniquement dans le premier projet.
Alors, quand j'ai construit la solution, le second projet de son remplacer Dll à partir de la première projet(projet de construction).
Problème disparu après la mise à jour des Dll dans le second projet de.
Assurez-vous que les noms d'espaces de noms, les noms de classe, etc) sont ce qu'ils sont censés être. J'ai eu cette erreur lorsque j'ai dû recommencer sur mon projet et j'ai copié le contenu de ma classe à partir d'un modèle et n'a pas pu changer le nom de la classe de "Classe de Modèle" pour le nom correct (il était censé correspondre au nom du projet).