2010-09-27 7 views
0

Pour commencer, je voudrais dire que je ne suis pas familier avec le système de liaison Windows. (La majeure partie de mon expérience de programmation a été acquise sur Mac OS, sur laquelle les bibliothèques de liens et le framework sont radicalement différents.) Je ne suis pas un utilisateur de Windows.)FileNotFoundException essayant de charger une DLL à partir du code managé

Voici ma configuration: J'ai deux projets en cours. la même solution. Le premier est un projet C++/CLI que nous appellerons Foo. Foo est un projet de bibliothèque qui dépend d'une bibliothèque externe (Java Runtime Environment), et a donc la référence appropriée au fichier approprié (je crois depuis sa compilation) .lib. (Je n'ai modifié aucun autre paramètre de projet lié au chargement de cette bibliothèque.) Mon autre projet, Bar est un projet exécutable de console C# qui référence Foo.

Les deux compilent très bien.

Cependant, quand j'exécute mon programme C# Bar.exe, il meurt avant la construction du premier objet qui nécessite des types de Foo. L'exception est un FileNotFoundException qui indique que l'assembly Foo.dll ou l'une de ses dépendances est introuvable.

J'ai donc lancé fuslogvw pour voir ce qui n'allait pas, mais je ne comprends pas vraiment comment cela fonctionne, et la documentation que j'ai trouvée dessus est plutôt inutile. D'après ce que je crois avoir compris, les deux codes Foo et Bar n'ont pas pu être chargés en tant qu'images natives, mais ils ont été trouvés corrects et ont été correctement chargés de cette façon. Il n'y a pas d'autre mention pertinente d'échec, cependant, évidemment, échoue à un moment donné. Je posterais les journaux, mais ils sont en français et je pense que ce serait inutile.

Une idée?

Répondre

1

Toutes les dépendances de l'exécutable et de la DLL sont-elles présentes dans le répertoire de sortie? Vérifiez d'abord les dépendances natives avec Depends.

+0

La DLL de la bibliothèque externe ne se trouve pas dans le répertoire de sortie et Depends indique en effet qu'elle n'a pas pu le trouver. Ai-je besoin de copier la DLL ou y a-t-il une solution plus élégante? Le déploiement de ce projet ne se produira probablement que sur des machines sur lesquelles j'aurai un contrôle total. – zneak

+0

Cela dépend exactement comment vous liez à la DLL et donc comment il est chargé, ce qui impliquera probablement l'ordre de recherche DLL. Voir http://msdn.microsoft.com/en-us/library/ms682586.aspx pour plus de détails. –

+0

Donc, je voudrais d'abord copier la DLL dans le répertoire de sortie, pour être sûr qu'elle résout le problème actuel, puis décider quoi faire du déploiement. –

Questions connexes