.net - System.BadImageFormatException: no se pudo cargar el archivo o el ensamblaje(desde installutil.exe)
windows-services x86 (8)
Estoy tratando de instalar un servicio de Windows usando InstallUtil.exe y recibo el mensaje de error
System.BadImageFormatException: no se pudo cargar el archivo o ensamblado ''
{xxx.exe}
'' o una de sus dependencias. Se intentó cargar un programa con un formato incorrecto.
¿Lo que da?
EDITAR: (No por OP) Mensaje completo extraído del dup obteniendo mucho más hits [para googleability]:
C: / Windows / Microsoft.NET / Framework64 / v4.0.30319> InstallUtil.exe C: / xxx.exe Utilidad de instalación de Microsoft (R) .NET Framework Versión 4.0.30319.1 Copyright (c) Microsoft Corporation. Todos los derechos reservados.
Se produjo una excepción al inicializar la instalación: System.BadImageFormatException: no se pudo cargar el archivo o ensamblado ''file: /// C: / xxx.exe'' o una de sus dependencias. Se intentó cargar un programa con un formato incorrecto.
Asegúrese de que el Framework más nuevo (aquel con el que compiló su aplicación) sea el primero en la RUTA. Eso resolvió el problema para mí. Se encuentra aquí: http://www.issociate.de/board/post/280574/Installutil_System.BadImageFormatException.html
Creo que está utilizando la versión de 64 bits de la herramienta para instalar una aplicación de 32 bits. También me he enfrentado a este problema hoy y he utilizado esta ruta de trabajo Framework para atender.
C: / Windows / Microsoft.NET / Framework / v4.0.30319
y debería instalar su aplicación de 32 bits muy bien.
Gracias
Sachin Kalia
En caso de que ayude a alguien, pude arreglar esta misma excepción usando esta respuesta a una pregunta similar, pero no obtuve la excepción de usar installutil.exe.
Más detalles para completar en caso de que ayude a alguien ...
Tenga en cuenta que la razón más común para esta excepción en estos días es intentar cargar una DLL de 32 bits ( /platform:x86
) en un proceso de 64 bits o viceversa (por ejemplo, cargar un específico de 64 bits ( /platform:x64
) DLL en un proceso de 32 bits). Si su platform
no es específica ( /platform:AnyCpu
), esto no se producirá (suponiendo que las dependencias de referencia no tengan la bitness incorrecta).
En otras palabras, ejecutando:
% windir% / Microsoft.NET / Framework / v2.0.50727 / installutil.exe
o:
% windir% / Microsoft.NET / Framework 64 / v2.0.50727 / installutil.exe
no funcionará (sustitúyalo en otras versiones de framework: v1.1.4322
(solo 32 bits, por lo que este problema no se presenta) y v4.0.30319
como se desee en lo anterior).
Obviamente, como se cubre en la otra respuesta, también necesitará el número de versión de .NET del installutil
que esté ejecutando para que sea> = (preferiblemente =) el del archivo EXE / DLL desde el que está ejecutando el instalador.
Por último, tenga en cuenta que en Visual Studio 2010, las herramientas se usarán de forma predeterminada para generar binarios x86 (en lugar de cualquier CPU como anteriormente ).
Los detalles completos de System.BadImageFormatException (diciendo que la única causa es que la bittingsidad no coincide es realmente una simplificación excesiva).
Otra razón para una BadImageFormatException
en un instalador x64 es que en Visual Studio 2010, el tipo de proyecto de instalación .vdproj
predeterminado genera una corrección InstallUtilLib
32 bits, incluso en un sistema x64 (Buscar "acciones personalizadas administradas de 64 bits". Excepción BadImageFormatException "en la página).
Mi problema fue diferente Esto ocurrió después de un apagado inesperado de mi máquina con Windows 7. Realicé una solución limpia y funcionó como se esperaba.
OK, este es el problema que tuve, y, lo que lo solucionó, parece muy relevante para lo anterior.
Estoy usando Visual Studio 2010 Express. Escribí un servicio de prueba que realmente no hizo nada. Simplemente fue práctica para lo real más tarde.
Escribí el servicio e intenté instalarlo usando installutil.exe
y obtuve el siguiente error:
System.BadImageFormatException: No se pudo cargar el archivo o ensamblado ''{filename.exe}'' o una de sus dependencias. Se intentó cargar un programa con un formato incorrecto.
Hasta ahora lo mismo que el autor original.
La observación de Ruben anterior sobre la salida de 32 bits de Visual Studio 2010 fue el salvador aquí.
installutil.exe
la versión de 64 bits de installutil.exe
y, installutil.exe
, el resultado de la compilación de Visual Studio 2010 fue de 32 bits. Solo para agregar un poco más de valor aquí, puede encontrar la versión de 32 bits del último .NET framework y el installutil.exe
asociado en la installutil.exe
C: / Windows / Microsoft.NET / framework . El uso de esta versión de installutil.exe
solucionó mi problema; el servicio instalado sin problemas!
Espero que esto ayude a alguien más allá.
Resumiendo, tanto la compilación como la plataforma Project / Build / deben establecerse en x64 para instalar con éxito el servicio de 64 bits en el sistema de 64 bits.
Tuve el mismo problema. Estoy usando el comando estándar para la ejecución. Llamaba a X64 ro correr contra las pruebas X86. Necesitaba especificar el X86 y no la versión X64 del nunit-runner.