Recentemente, enquanto trabalhava com uma aplicação em Managed DirectX no .NET (num sistema de 64 bits), deparei-me com o seguinte erro:
BadImageFormatException was unhandled
is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
- Make sure the file image is a valid managed assembly.
- Make sure you have supplied a correct file path for the assembly.
- Get General help for this exception.
Se pedirmos mais detalhes ele dá-nos a seguinte informação:
System.BadImageFormatException was unhandled
Message=" is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)"
Source="Something"
StackTrace:
at Something.Program.Main()
at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Solução - Mudar a plataforma da solução para sistemas x86
No meu caso e do que consegui descobrir na web, isto costuma acontecer em sistemas de 64 bits (estou numa máquina com Windows Vista Business versão 64 bits). O problema é que o compilador tenta produzir código compatível com 64 bits, mas como não tem as assemblies ou bibliotecas necessárias falha com a excepção BadImageFormatException.
A solução é dizer ao compilador para produzir código para sistemas x86 (porque a maioria das assemblies/bibliotecas apenas suporta sistemas x86). Depois de fazer isto o problema deverá ter desaparecido (o código produzido para sistemas x86 deverá correr em sistemas de 64 bits).
Em seguida explicarei os passos para configurar a plataforma de um projecto. A explicação será feita usando o Visual Studio 2005, mas com outra versão os passos deverão ser quase os mesmos.
Precisamos de fazer o seguinte:
- Ir à página de propriedades da solução
- Seleccionar o Configuration Manager
- Adiciona uma nova plataforma (para sistemas x86) ao projecto
Primeiro é necessário ir às propriedades da solução. No Solution Explorer seleccionem a vossa solução, usem o botão direito do rato e escolham Properties.
Uma caixa de diálogo com as Property Pages deverá aparecer. Certifiquem-se que a opção Configuration Properties está seleccionada no lado esquerdo da janela. Pressionem o botão Configuration Manager que aparece no canto superior direito da caixa de diálogo.
Aparece o Configuration Manager. Agora deverão ir até à coluna Platform do vosso projecto e escolher a opção "<New...>".
Aparece uma janela para configurarem a vossa nova plataforma. Na primeira opção escolham "x86", no campo Copy settings from: escolham a opção "<Empty>" e deixem a checkbox desactivada. Pressionem o botão "OK" para fechar a janela.
O projecto deverá agora aparecer com a opção "x86" na coluna Platform no Configuration Manager. Fechem a janela Configuration Manager e pressionem o botão "OK" para fechar as propriedades da solução. O programa deverá agora correr sem este problema.