504 votes

« Une tentative a été effectuée pour charger un programme avec un format incorrect » même si les plates-formes sont les mêmes

Je suis d'appeler les fonctions d'un 32-bit DLL non managée sur un système 64 bits. Ce que je reçois est:

BadImageFormatException: Une tentative a été faite pour charger un programme avec un format incorrect. (Exception de HRESULT: 0x8007000B)

Au début, j'ai eu mes projets pour le CPU plate-forme, alors j'ai changé tous les deux pour x86, mais cette erreur est encore en cours. C'est vraiment la seule solution que je sais pour cela.

Les Dll ne sont pas corrompus ou quoi que ce soit, parce que je peux les utiliser avec d'autres programmes (que je n'ai pas la source). J'ai pensé que peut-être il n'était pas de trouver une dépendance, mais j'ai vérifié et ils sont tous là. De Plus, ne serait-ce pas jeter un DllNotFoundException dans ce cas?

Que puis-je faire? Et avant de vous dire "Utilisez la version 64 bits non géré DLL au lieu de cela," permettez-moi de souligner qu'il n'en est pas une. ;)

570voto

kalyan Points 3313

Si vous essayez d’exécuter des applications 32 bits sur IIS 7 (et/ou ordinateur OS 64 bits), vous obtiendrez la même erreur. Donc, de l’IIS 7, faites un clic droit sur le pool d’applications les applications et aller dans « Paramètres avancés » et modifier « Activer les Applications 32 bits » à « TRUE ».

Redémarrez votre site Internet et cela devrait fonctionner.

enter image description here

142voto

David Brown Points 14365

D'une manière ou d'une autre, la case à cocher Construire dans le gestionnaire de configuration avait été décochée pour mon exécutable, donc il fonctionnait toujours avec l'ancienne génération de n'importe quel CPU. Après avoir résolu cela, Visual Studio s'est plaint qu'il ne pouvait pas déboguer l'assembly, mais cela a été résolu avec un redémarrage.

94voto

Marvin Thobejane Points 356

Dans VS2012, cliquez-Droit sur votre projet -> Sur le volet de gauche, cliquez sur le Construire onglet,

Project properties, build tab

en vertu de la Plate-forme Cible sélectionnez x86 (ou plus généralement de l' architecture en adéquation avec la bibliothèque vous le lien)

Project properties, platform target

J'espère que cela aide quelqu'un! :)

56voto

Denis Points 2122

J'ai juste eu ce problème aussi. J'ai essayé toutes les suggestions ici, mais ils n'ont pas d'aide.

J'ai trouvé une autre chose à vérifier qu'il fixe pour moi. Dans Visual Studio, cliquez-droit sur le projet et ouvrir "Propriétés". Cliquez sur le "Compiler" onglet, puis cliquez sur "Advanced Options de Compilation" en bas.

Vérifier la liste déroulante "du PROCESSEUR Cible". Il doit correspondre à la "Plate-forme" en cours de création. C'est, si vous êtes à la construction de "any CPU", puis sur "PROCESSEUR Cible" devrait dire "any CPU". Aller à travers tous vos plates-formes en les rendant actifs et de vérifier ce paramètre.

40voto

Drew Noakes Points 69288

Si vous utilisez un processeur , vous pouvez rencontrer ce problème si l'option Préférer 32 bits est cochée:

Assurez-vous de décocher cette option!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X