Solución:
Algunos detalles más 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 un archivo específico de 32 bits (/platform:x86
) DLL en un proceso de 64 bits o viceversa (es decir, cargar un (/platform:x64
) DLL en un proceso de 32 bits). Si tu platform
no es específico/platform:AnyCpu
), esto no surgirá (asumiendo que las dependencias referenciadas no tienen el bitness incorrecto).
En otras palabras, ejecutando:
% windir% Microsoft.NET Framework v2.0.50727 installutil.exe
o:
% windir% Microsoft.NET Framework64 v2.0.50727 installutil.exe
no funcionará (sustitúyalo en otras versiones del marco: v1.1.4322
(Solo 32 bits, por lo que este problema no surge) y v4.0.30319
como se desee en lo anterior).
Obviamente, como se explica en la otra respuesta, también se necesitará el número de versión .NET del installutil
está ejecutando para ser> = (preferiblemente =) el del archivo EXE / DLL del que está ejecutando el instalador.
Por último, tenga en cuenta que en Visual Studio 2010, las herramientas generarán de forma predeterminada binarios x86 (en lugar de Cualquier CPU como anteriormente).
Detalles completos de System.BadImageFormatException (decir que la única causa es una falta de coincidencia de bits es realmente una simplificación excesiva).
Otra razón para un BadImageFormatException
bajo un x64 instalador es que en Visual Studio 2010, el predeterminado .vdproj
El tipo de proyecto de instalación genera un InstallUtilLib
calce, incluso en un sistema x64 (Busque “acciones personalizadas administradas de 64 bits que generan una excepción System.BadImageFormatException” en la página).
Asegúrese de que el Framework más nuevo (el que compiló su aplicación) sea el primero en la RUTA. Eso me solucionó el problema. (Encontrado en un foro)
La clave es establecer la configuración del procesador de coincidencia para el proyecto, que se encuentra en dos lugares.
Y también asegúrese de que la configuración de la arquitectura sea la misma en el menú Prueba >> Configuración de prueba >> Arquitectura de procesador predeterminada >> como se muestra a continuación.
Esto es para VS2013 pero quizás lo mismo para otras versiones también.
Actualización – Para VS2019: