2011-10-07 3 views
1

J'ai une situation étrange avec du code dont j'ai hérité au travail. Leur application est une solution multi-projets, avec plusieurs des solutions étant des morceaux (code) de la MS Enterprise Library (pas sûr de la version). Ils ont également une application C++ (non gérée) existante qui a un tas de DLL. L'une de ces DLL est intégrée dans une solution distincte, à la fois dans les versions 64 bits et 32 ​​bits.La DLL référencée est introuvable lors de l'exécution de l'application

L'application principale a une référence à cette DLL, et appelle quelques fonctions statiques (je peux voir intellisense, même). Je peux compiler et construire l'application principale EXEs, mais quand je le lance, je reçois une exception que cette DLL à partir du code non managé (permet de l'appeler CPlusPlusCode.dll ne peut pas être trouvé:

FileNotFound exception non gérée: Impossible de charger fichier ou l'assembly « CPlusPlusCode.dll » ou une de ses dépendances. le module spécifié est introuvable.

Je suis assez perplexe, parce que je peux compiler le code, voir IntelliSense pour les classes importées, et creuser Je me suis même assuré qu'il y avait une copie dans le dossier \ bin \ Debug (bien que je ne vois pas pourquoi cela ferait une différence) .C'est pour une application Windows Forms.

En outre, si cela compte, j'ai eu quelques problèmes de construction liés à x86 vs x64 pour différents projets; Je pense (j'espère?) Que cela n'est pas lié à cela, mais j'ai résolu cela en utilisant le gestionnaire de configuration pour tout construire en x64.

+0

Je n'ai pas de pile d'appels; tout ce que je vois sur la pile est '[Code externe]' – ashes999

+1

'ou l'une de ses dépendances'. Utilisez ProcMon de SysInternals si vous n'avez aucune idée de la DLL recherchée. –

Répondre

0

Vérifiez le GAC et, si nécessaire, vous devrez peut-être l'ajouter ou y enregistrer la DLL.

+0

Si ma DLL est dans le même chemin que l'exécutable, pourquoi n'est-ce pas suffisant? – ashes999

+0

Eh bien votre programme ne peut pas trouver le fichier, avez-vous placé à la fois le fichier x86 et x64 dans le dossier? –

+0

@Ramhound Je n'ai pas. Je suppose que puisque la DLL référencée est x64, j'ai seulement besoin de placer le x64 dans le dossier. Comment puis-je les placer tous les deux quand ils ont le même nom? – ashes999

0

J'ai eu ce problème avec un projet, tout fonctionne correctement à partir de Visual Studio et la plupart du temps en cours d'exécution du projet sur ma machine. Mais à cause du code non managé dont j'avais besoin, j'autorisais spécifiquement l'exécution du projet avec des niveaux d'autorisation corrects. Donc, jetez un oeil dans le fichier manifeste, qu'il existe suffisamment d'autorisations, etc.

+0

Peut-être que vous pouvez développer un peu et mentionner des étapes spécifiques sur ce qu'il faut vérifier et ce que je cherche; Je suis un peu perdu sur les détails. – ashes999

Questions connexes