Pregunta

Estoy desarrollando en Windows 7 de 64 bits con Visual Studio 2008.Tengo una colección de bibliotecas de clases que me combinar en un solo archivo DLL mediante ILMerge.Cuando trato de usar esta fusión DLL, sin embargo, me llega

[BadImageFormatException:No se pudo cargar el archivo o ensamblado 'MyMergedDll' o una de sus dependencias.Se hizo un intento de cargar un programa con un formato incorrecto.]

He estado buscando alrededor para ayudarle con esto, y parecía que necesitaba establecer la propiedad de generación en cada proyecto en MyMergedDll a destino x86, así que lo hice.También he puesto todos los no-MSTest proyectos en el servicio web en el que estoy referencia MyMergedDll a destino x86.Todavía estoy recibiendo este error, sin embargo.

Si esta entrada de blog es de creer, puedo conseguir este error como resultado de hacer:

public class SpecificClass: BaseClass: where T : class { }

Es decir, tener una clase de restricción en un genérico.La entrada del blog es de 2007, aunque, así que no sé si es que aún se aplica.Yo quería algo de entrada de StackOverflow en cuanto a lo que ustedes piensan que el problema es que antes de irme de seguimiento de cada clase genérica en mis proyectos a las restricciones check.

Si importa, MyMergedDll es fuerte-nombre de la firma.Estoy tratando de utilizar MyMergedDll en una aplicación de consola y en un servicio web.No sé si las cosas son tal vez complicado por si IIS está actualizando cada vez que reconstruir el servicio web.Con la aplicación de consola, solo me parecen obtener la BadImageFormatException cuando voy a construir en modo de Lanzamiento.

¿Fue útil?

Solución

Yo tengo que trabajar y creo que fue de hacer dos cosas:

  1. MyMergedDLL fue construida con un par de otras asambleas que tiene el control sobre, pero esas asambleas no fueron orientada a x86.He reconstruido los ensamblados de orientación x86, reconstruido las asambleas que conforman MyMergedDLL, y volver a fusionarse los ensambla para formar una nueva copia de MyMergedDLL.
  2. La aplicación de consola que utiliza MyMergedDLL fue establecido en x86 en modo de Depuración, pero no a modo de Lanzamiento, por lo tanto ¿por qué iba a funcionar en modo de Depuración, pero le dan la BadImageFormatException en modo de Lanzamiento.

La primera cosa que puede no haber sido necesario.Creo que sólo necesitaba el consumidor de MyMergedDLL también de destino x86 en modo de Lanzamiento.Nunca pude averiguar que versión de ILMerge yo estaba usando, así que acabo de re-instalado con la última MSI he podido encontrar en el sitio de Microsoft.

Otros consejos

Tiene usted una doble comprobación de la versión de ILMerge usted está utilizando?

Lo pregunto porque una vieja versión incorrecta de aspnet_merge (que básicamente hace lo mismo la fusión de dll entre otras cosas) que nos causó a tener los mismos problemas que usted está describiendo.Me fui en algunos detalles al responder este pregunta para alguien ASÍ.

Puede ser vale la pena tener un rápido vistazo a el archivo dll en ILDASM (Reflector tiende a caerse al intentar descompilar estos malos dll - tal vez unsuprisingly) y ver si se puede hacer el punto de la corrupción y lo que corresponde en el código como puede arrojar luz sobre el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top