Tengo un servicio de Windows escrito en C # usando Visual Studio 2010 y dirigido 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 versión, 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.
El problema existe en los sistemas Windows 7 de 64 bits (dev) y Windows XP SP3 de 32 bits (destino).
Esto es lo que he probado hasta ahora:
- Las configuraciones de compilación verificadas, como Platform Target, son todas iguales (x86).
- Se usa peverify con la opción / verbose para garantizar que los binarios del ensamblado sean válidos.
- Utiliza fuslogvw para buscar problemas de carga.
- Utiliza CheckAsm para buscar archivos o ensamblados faltantes.
Todos estos controles no cambiaron nada. Incluí el texto completo de la información de la excepción a continuación, con algunos de los nombres cambiados para proteger los secretos de mis maestros corporativos.
System.BadImageFormatException no se controló Mensaje = No se pudo cargar el archivo o ensamblado 'XxxDevices, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' o una de sus dependencias. Se intentó cargar un programa con un formato incorrecto. Fuente = XxxDevicesService FileName = XxxDevices, Versión = 1.0.0.0, Cultura = neutral, PublicKeyToken = nulo FusionLog = Administrador de ensamblaje cargado desde: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll Ejecutando en ejecutable c: \ Dev \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe --- A continuación se muestra un registro de errores detallado. === Información de estado previa al enlace === REGISTRO: Usuario = XXX REGISTRO: DisplayName = XxxDevices, Versión = 1.0.0.0, Cultura = neutral, PublicKeyToken = nulo (Completamente especificado) LOG: Appbase = file: /// c: / Dev / TeamE / bin / Release / LOG: PrivatePath inicial = NULL Ensamblado de llamada: XxxDevicesService, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null. === LOG: este enlace se inicia en el contexto de carga predeterminado. REGISTRO: utilizando el archivo de configuración de la aplicación: c: \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe.Config LOG: utilizando el archivo de configuración del host: REGISTRO: utilizando el archivo de configuración de la máquina de C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config. REGISTRO: La política no se aplica a la referencia en este momento (enlace de ensamblado privado, personalizado, parcial o basado en la ubicación). REGISTRO: Intentando descargar un nuevo archivo URL: /// c: /TeamE/bin/Release/XxxDevices.DLL. ERR: No se pudo completar la configuración del ensamblaje (hr = 0x8007000b). Sondeo terminado. StackTrace: en XxxDevicesService.Program.Main (String [] args) en System.AppDomain._nExecuteAssembly (ensamblado RuntimeAssembly, String [] args) en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly () en System.Threading.ExecutionContext.Run (ExecutionContext executionContext, devolución de llamada ContextCallback, estado del objeto, booleano ignoreSyncCtx) en System.Threading.ExecutionContext.Run (ExecutionContext executionContext, devolución de llamada ContextCallback, estado del objeto) en System.Threading.ThreadHelper.ThreadStart () InnerException:
XxxDevicesService
? ¿Está compilado para una plataforma específica (por ejemplo, 32 bits)? Si es así, debe compilar su plataforma a 32 bits.