Tengo un servicio de Windows escrito en C# utilizando Visual Studio 2010 y apuntando a .NET Framework 4. Cuando ejecuto desde una compilación de depuración el servicio se ejecuta como se esperaba. Sin embargo, cuando lo ejecuto desde una versión de Release obtengo una System.BadImageFormatException (detalles a continuación). He estado buscando una solución en Internet, pero hasta ahora todo lo que he encontrado no me ha ayudado a encontrar una solución.Solución de problemas BadImageFormatException
El problema existe en los sistemas Windows 7 de 64 bits (dev) y Windows XP SP3 de 32 bits (de destino).
Esto es lo que he probado hasta ahora:
- verificado la configuración de creación como plataforma de destino son todos del mismo (86).
- Peverify usado con la opción/verbose para garantizar que los archivos binarios de ensamblaje fueran válidos.
- Utiliza fuslogvw para buscar cualquier problema de carga.
- Se usa CheckAsm para buscar archivos o conjuntos faltantes.
Todos estos controles no cambiaron nada. He incluido el texto completo de la información de excepción a continuación, con algunos de los nombres modificados para proteger los secretos de mis maestros corporativos.
System.BadImageFormatException was unhandled Message=Could not load file or assembly 'XxxDevices, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format. Source=XxxDevicesService FileName=XxxDevices, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null FusionLog=Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Running under executable c:\Dev\TeamE\bin\Release\XxxDevicesService.vshost.exe --- A detailed error log follows. === Pre-bind state information === LOG: User = XXX LOG: DisplayName = XxxDevices, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (Fully-specified) LOG: Appbase = file:///c:/Dev/TeamE/bin/Release/ LOG: Initial PrivatePath = NULL Calling assembly : XxxDevicesService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. === LOG: This bind starts in default load context. LOG: Using application configuration file: c:\TeamE\bin\Release\XxxDevicesService.vshost.exe.Config LOG: Using host configuration file: LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config. LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind). LOG: Attempting download of new URL file:///c:/TeamE/bin/Release/XxxDevices.DLL. ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated. StackTrace: at XxxDevicesService.Program.Main(String[] args) at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:
¿Qué es xxxDevices? –
¿estás mezclando código nativo/.net en absoluto? –
Está en el camino correcto que esta excepción está asociada con las diferencias de bit x86/x64. Supongo que esto no es una aplicación web, ¿verdad? Además, ¿qué tipo de ensamblaje es 'XxxDevicesService'? ¿Está compilado para una plataforma específica (por ejemplo, 32 bits)? Si es así, entonces debes compilar tu plataforma a 32 bits. – Reddog