.net - system badimageformatexception vb net




"Foi feita uma tentativa de carregar um programa com um formato incorreto", mesmo quando as plataformas são as mesmas (10)

Eu estou chamando funções de uma DLL não gerenciada de 32 bits em um sistema de 64 bits. O que eu recebo é:

BadImageFormatException: Foi feita uma tentativa de carregar um programa com um formato incorreto. (Exceção de HRESULT: 0x8007000B)

No início, eu tinha meus projetos configurados para a plataforma Any CPU, então mudei ambos para x86, mas esse erro ainda está ocorrendo. Essa é realmente a única solução que eu conheço para isso.

As DLLs não são corruptas nem nada, porque eu posso usá-las com outros programas (que eu não tenho a fonte). Eu pensei que talvez não fosse encontrar uma dependência, mas eu verifiquei e eles estão todos lá. Além disso, não lançaria uma DllNotFoundException nesse caso?

O que mais eu posso fazer? E antes de dizer "Use uma DLL não gerenciada de 64 bits", deixe-me salientar que não há uma. ;)


Com base na resposta do @paibamboo

Ele disse: Vá em: Ferramentas> Opções> Projetos e soluções> Projetos da Web> Use a versão de 64 bits do IIS Express

Meu colega de trabalho tinha essa caixa marcada (ele a procurava explicitamente), mas tinha a mensagem de erro em questão. Depois de algumas horas, ele desmarcou a caixa e verificou novamente. Eis e veja: O código agora foi executado com sucesso.

Parece que há dois lugares onde o estado dessa caixa é salvo, o que ficou fora de sincronia. Un e rechecking sincronizou novamente.

Pergunta para usuários mais experientes: Houve uma atualização ou algo assim na semana passada (para o VS 2015) que sincronizou os estados?


Consegui corrigir esse problema combinando minha versão de compilação com a versão .NET no servidor.

Eu cliquei duas vezes no .exe apenas para ver o que aconteceria e me disse para instalar o 4.5 ....

Então eu fiz o downgrade para 4.0 e deu certo!

Portanto, verifique se suas versões são compatíveis. Ele correu na minha caixa dev bem, mas o servidor tinha a versão mais antiga do .net.


Eu só tive esse problema também. Tentei todas as sugestões aqui, mas eles não ajudaram.

Eu encontrei outra coisa para verificar que consertou isso para mim. No Visual Studio, clique com o botão direito do mouse no projeto e abra "Propriedades". Clique na guia "Compile" (ou "Build") e, em seguida, clique em "Advanced Compile Options" na parte inferior.

Verifique o menu suspenso "Target CPU". Deve corresponder à "Plataforma" que você está construindo. Isto é, se você está construindo "Any CPU", então "Target CPU" deve dizer "Any CPU". Percorra todas as suas plataformas ativando-as e verifique essa configuração.


Eu tenho esse problema resolvido no modo 'Windows'. Depois de verificar todas as minhas configurações, limpar a solução e recriá-la, simplesmente fecho a solução e reabri-a. Então funcionou, então o VS provavelmente não se livrou de algumas coisas durante a limpeza. Quando as soluções lógicas não funcionam, geralmente me volto para as ilógicas (ou aparentemente ilógicas). O Windows não me decepcionou. :)


No meu caso eu estava usando uma DLL nativa em c #. Essa DLL dependia de algumas outras DLLs que estavam faltando. Uma vez que essas outras DLLs foram adicionadas, tudo funcionou.


No meu caso, estava errado o conteúdo do arquivo. DLL foi baixado da web, mas o conteúdo da DLL era a página HTML: D Tente verificar se é um arquivo binário, se parece que a DLL correta :)


No meu caso, eu estava executando testes por meio do MSTest e descobri que estava implantando uma DLL de 32 bits e 64 bits no diretório de teste. O programa estava favorecendo a DLL de 64 bits e causando falha.

TL; DR Certifique-se de apenas implantar DLLs de 32 bits nos testes.


Se você encontrar esse erro ao clicar no botão de seta verde para executar o aplicativo, mas ainda quiser executar o aplicativo em 64 bits. Você pode fazer isso no VS 2013, 2015 e 2017

Vá para: Ferramentas> Opções> Projetos e soluções> Projetos da Web> Usar a versão de 64 bits do IIS Express


Se você tentar executar aplicativos de 32 bits no IIS 7 (e / ou na máquina do sistema operacional de 64 bits), ocorrerá o mesmo erro. Portanto, no IIS 7, clique com o botão direito do mouse no pool de aplicativos e vá até "advanced settings" e altere "Enable 32-Bit Applications" para "TRUE".

Reinicie seu site e ele deve funcionar.


Um pouco fora do tópico para este post, mas a busca por essa mensagem de erro me trouxe até aqui.

Se você estiver criando um sistema de equipe e obtendo esse erro, a guia do processo de definição de compilação terá uma configuração "MSBuild Platform". Se isso estiver definido como "Auto", você pode enfrentar esse problema. Alterá-lo para "X86" também pode resolver o erro.





badimageformatexception