Error en IIS BadImageFormatException

Subiendo una aplicación web al servidor me encontré con un error muy raro y que hasta el momento no me había pasado nunca.

Error System.BadImageFormatException !!!

La página del error en el IIS es:

error

La aplicación hasta ese momento estaba funcionando y después de añadirle un nuevo ensamblado  Masivos.Application.Interfaces dejó de funcionar. Lo curioso es que en el servidor de desarrollo funcionaba perfectamente, pero en el servidor de Pre no había manera que funcionara.

Lo primero que tenemos que saber es que la máquina de desarrollo estaba corriendo en un Windows7  32bits y el servidor de Pre en un Windows Server 2008 R2 64 bits.

La configuración de la solución

Lo primero que hay que mirar es la configuración de la solución.

configuracion

A simple vista se ve algo raro, justamente el proyecto que está fallando esta compilando siempre en x86 y eso no es lo correcto, la compilación tendría que ser igual que el resto de proyectos de librerías para Any CPU. Lo peor de todo es que al intentar modificar esta configuración no aparece la opción y solo permite compilar para x86.

El porqué de todo esto

El error está bastante claro: Una DLL o aplicación ejecutable se carga como un ensamblado de 64 bits, pero contiene características o recursos de 32 bits. Por ejemplo, usa la interoperabilidad COM o llama a métodos en una biblioteca de vínculos dinámicos de 32 bits.  http://msdn.microsoft.com/es-es/library/system.badimageformatexception.aspx.

Mis intentos para solucionar el problema pasaron por:

  1. intentar obligar al pool de aplicaciones del IIS en que la solución corriera en x86. FAIL !!
  2. Intentar por todos los medios que el proyecto de Interfaces se compilara en Any CPU. FAIL!!

 

La Solución

Lo que me mosqueaba era porque motivo un proyecto de librería no me dejaba poder establecer la compilación en Any CPU y la respuesta surgió cuando el que creó el proyecto comento que en principio seleccionó la plantilla de consola y luego modifico el proyecto a librerías.   Argggg !!!!!

Visual Studio cuando crea un proyecto de consola siempre lo configura como x86 y la única manera de poder cambiar esto es modificando a mano la configuración del proyecto. Pues la solución rápida fue crear un nuevo proyecto directamente de librería y copiar todos los ficheros al nuevo proyecto.  Una vez todos los ensamblados compilados en 64bits el deploy funcionó y todos felices.

Experiencias del día a día de un desarrollador ;-)

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s