2010-11-26 37 views
1

J'ai une application .NET CF 1.1 qui fonctionne parfaitement depuis des années. De temps en temps, je reçois un billet aide de bureau avec le message d'erreur suivant (générique):Pourquoi mon application .NET CF ne trouve-t-elle pas une DLL dans le même répertoire que l'exécutable?

 
    Method not found: 
    MethodName 
    AssemblyNamespace.Class 

La DLL est là, et il est de la même version que mes autres appareils. Ce qui pourrait changer cela le ferait ne pas trouver la méthode. Cette erreur implique-t-elle que l'assemblage a été chargé ou a-t-il rompu avant que cela ne se produise?

Est-ce que c'est important comment j'ai ajouté la référence dans Visual Studio (2003, btw)? J'ai Copier Local défini à true, et donc j'ai fait l'hypothèse qu'il doit être dans le même répertoire que mon exécutable.

Toute aide que vous pouvez offrir est appréciée. Merci.

EDIT: Je crois que cette DLL se trouve aussi dans le répertoire windows de l'appareil, probablement une version différente. Il contient beaucoup de fonctions spécifiques au matériel (rétroéclairage, état du clavier, etc.)

+0

"Méthode introuvable" est un problème DLL Hell. –

Répondre

1

Non, peu importe comment vous ajoutez la référence dans Visual Studio 2003. (100% sûr)
Maintenant, pour le pas si sûr : Je pense que quelqu'un d'autre a le même assemblage dans le GAC du téléphone. Ainsi, l'assembly GAC est appelé plutôt que celui que vous avez déployé et cette version de l'assembly n'a pas la fonction demandée.

+0

Haha ... a édité ma question pendant que vous répondiez. Si c'est le cas, comment puis-je le forcer à charger celui que je connais est correct? – IronicMuffin

+0

Et sur cette note ... pourquoi le fait-il seulement parfois? Je suppose que c'est GAC sur chaque périphérique ... – IronicMuffin

+0

vérifier http://stackoverflow.com/questions/49972/in-what-order-are-locations-searched-to-load-referenced-dlls pour l'ordre dans quels assemblages sont recherchés.
De toute façon, d'autres logiciels pourraient être mis à jour. Sur certains téléphones, ce logiciel est là. Sur d'autres ce n'est pas. – basarat

0

Dépend de la façon dont vous référencez le fichier dans votre code. Vous pouvez vous fier au répertoire de travail actuel qui, selon la façon dont l'application est lancée ou ce qu'elle fait après, ne correspond peut-être pas à ce que vous attendez d'elle.

0

Parfois, .NetCf lève cette exception lorsque le périphérique est à court de mémoire, au lieu de l'exception "Mémoire insuffisante" attendue. J'ai observé ce comportement plus souvent lors du chargement de DLL natives à l'aide de P/Invoke que lors du chargement de dlls netcf.