9

Escribí un dll en VS 2005 que será cargado por otro programa que fue desarrollado en VS 2003. Cuando ese programa intenta cargar mi dll, arroja un System.BadImageFormatException: The format of the file 'Foo.dll' is invalid.System.BadImageFormatException: ¿Cómo arreglar la versión .NET no coincide?

Busqué SO y Google, y parece que la versión diferente de .NET es la culpable. Mi pregunta es: ¿Cómo soluciono esto?

(no puedo modificar el programa desarrollado en 2003. VS)

+0

Este enlace también fue útil: http://devlicio.us/blogs/ziemowit_skowronski/archive/2008/08/22/working-with-net-1-1-in-visual-studio-2008-and-team -server.aspx – joshdick

+0

Una biblioteca nativa (no administrada) con un tamaño de palabra diferente también puede arrojar esta excepción. Tendrá que obtener una versión para el tamaño de palabra correcto o crear la aplicación de alojamiento para que coincida. – Pekka

Respuesta

7

Compile el proyecto VS2005 con la misma versión .Net que utiliza su proyecto VS2003. O, según el tamaño de su proyecto VS2003, reflecte y vuelva a escribirlo. Esa es una práctica común para proyectos aquí, donde por alguna razón oscura no hay más versiones de VSS disponibles.

+0

"Compile el proyecto VS2005 con la misma versión .Net que utiliza su proyecto VS2003". ¿Puedes explicarme cómo hacer eso? No veo cómo elegir la versión .NET de mi proyecto. – joshdick

+0

Haga clic con el botón derecho en su proyecto en VS, en la primera pestaña puede seleccionar el marco de destino. –

+0

Gracias, Markus. Aunque eso no funcionó en VS 2005, funcionó en la versión de 2008. Aprecio tu ayuda. – joshdick

17

Tengo este error cuando estaba corriendo la versión de 64 bits de CLR y tratando de cargar un ensamblado que se marcó de 32 bits solamente. El ensamblaje específico en mi caso fue Oracle.DataAccess.dll que viene como parte de ODP.NET.

+0

También estoy obteniendo el mismo error (con un ensamblaje diferente), ¿tiene alguna solución para eso? – Marek

+1

Solo necesita asegurarse de ejecutar el CLR de 32 bits cuando carga ensamblajes de solo 32 bits –

+1

Esta fue la respuesta a mi problema. No me había enfrentado a esto en bastante tiempo, pero cuando uno usa la interoperabilidad COM es bastante común encontrarse con este escenario cuando se usa la configuración de compilación 'Any CPU' y luego se implementa en un servidor de 64 bits. Las configuraciones x86 son útiles en esos casos. –

14

SOLUCIÓN: Si está en IIS7, haga clic con el botón derecho/Configuración avanzada en el grupo de aplicaciones específicas del sitio web y seleccione True on Enable 32-Bit Applications. Deberia de funcionar.

Cuestiones relacionadas