Could not load file or assembly ‘xxx’ or one of its dependencies. An attempt was made to load a program with an incorrect format

Cenário resumido
A exceção cuja descrição está no título do post é gerada ao acessar uma applicação ASP.NET rodando no IIS.

Explicação
Esse erro aparece geralmente quando você tenta executar um assembly compilado para plataforma 32bits, em um servidor rodando em 64bits, e o application pool utilizado para hospedar seu binário não está com o modo de compatibilidade 32bits ativo.

Você tem algumas soluções:

  • Ativar o modo de compatibilidade 32bits nas configurações avançadas do application pool responsável por rodar sua DLL
  • Recompilar para plataforma 64bits
  • Formatar o servidor e re-instalar em 32bits. (joking :) )



Como ativar o modo de compatibilidade para aplicações compiladas para plataforma 32bits ?
1. Acesse o console de gerenciamento do IIS (executar: inetmgr)
2. Selecione o application pool que executa sua aplicação e clique em Configurações Avançadas (Advanced Settings no meu caso) no menu lateral direito

3. Nos primeiros itens da seção geral (General), perceba a opção “Ativar aplicações 32-bit”. Ative a opção.

Dica: Mesmo ativando a opção de compatibilidade 32bits você pode encontrar alguns problemas com o acesso ao registro do windows server rodando em 64bits. Nesse caso, recomendo recompilar em 64bits.

Como recompilar para plataforma 64bits ?
1. No Visual Studio, clique com o botão direito no projeto responsável por gerar seu binário com problema

2. Vá até a aba Build (Compilação) e na opção de escolha de plataforma, escolha x64.

3. Recompile e dê publish para o servidor