2009-11-09 3 views
1

J'ai compilé une application .NET en utilisant l'option Any CPU. Cette application .NET utilise une DLL non gérée (wrapper géré) qui encapsule les appels C++. Cet encapsuleur .NET réside dans GAC.Impossible de charger l'ensemble sur XP 64bit

Lorsque j'exécute l'application .NET, elle fonctionne correctement sur XP 32 bits. Mais quand je le lance sur XP 64 bits, il échoue et donne l'exception suivante:

Impossible de charger le fichier ou l'assemblage « nom dll, Version, Culture = neutral, PublicKeyToken » ou une de ses dépendances.

Comment résoudre ce problème?

Répondre

3

Vous devez utiliser l'option CPU x86. Si vous savez que l'une de vos dépendances non gérées est 32 bits, vous devez construire votre solution avec l'option x86 pour le CPU. Cela garantit que même sur un système d'exploitation 64 bits, votre application sera exécutée dans un processus 32 bits.

Ceci est requis car il n'est pas possible de charger du code compilé 32 bits dans un processus 64 bits.

+0

Est-ce que l'option CPU ne suffit pas? –

+2

Non, ce ne sera pas. L'option "Any CPU" permet de construire un seul ensemble qui fonctionnera sur 32 à 64 bits. Lorsqu'il est exécuté sur un système d'exploitation 64 bits, .NET démarre un processus 64 bits et utilise la version 64 bits du compilateur JIT. Par conséquent, vous obtenez une erreur lorsque ce code tente ensuite de charger une DLL 32 bits seulement. Vous devez spécifiquement indiquer que .NET ne doit exécuter le code que dans un processus 32 bits, quel que soit le système d'exploitation sur lequel il s'exécute en spécifiant x86. – AnthonyWJones

-1

Vous pouvez trouver quelques explications sur Microsoft Connect website

+0

-1: Le lien n'est pas le même problème que cette question. –

0

Vous devez vous assurer que votre dll non géré est également capable 64Bit et dans le chemin de recherche.

Questions connexes