Tenho um serviço do Windows escrito em C # usando o Visual Studio 2010 e direcionado ao .NET Framework 4. completo. Quando executo a partir de uma compilação de depuração, o serviço é executado conforme o esperado. No entanto, quando eu o executo a partir de uma versão Release, recebo uma System.BadImageFormatException (detalhes abaixo). Tenho pesquisado na Internet por uma solução, mas até agora tudo o que encontrei não me ajudou a encontrar uma solução.
O problema existe nos sistemas Windows 7 de 64 bits (dev) e Windows XP SP3 de 32 bits (destino).
Aqui está o que tentei até agora:
- As configurações de compilação verificadas, como Platform Target, são todas iguais (x86).
- Usei peverify com a opção / verbose para garantir que os binários do assembly eram válidos.
- Usa fuslogvw para procurar problemas de carregamento.
- Use o CheckAsm para procurar arquivos ausentes ou assembiles.
Todas essas verificações não mudaram nada. Incluí o texto completo das informações de exceção abaixo, com alguns dos nomes alterados para proteger os segredos de meus senhores corporativos.
System.BadImageFormatException não foi tratada
Message = Não foi possível carregar o arquivo ou assembly 'XxxDevices, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' ou uma de suas dependências. Foi feita uma tentativa de carregar um programa com um formato incorreto.
Source = XxxDevicesService
FileName = XxxDevices, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null
FusionLog = Gerenciador de montagem carregado de: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll
Executando sob o executável c: \ Dev \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe
--- Segue um registro de erros detalhado.
=== Informação de estado de pré-ligação ===
LOG: Usuário = XXX
LOG: DisplayName = XxxDevices, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null
(Totalmente especificado)
LOG: Appbase = file: /// c: / Dev / TeamE / bin / Release /
LOG: PrivatePath inicial = NULL
Chamando assembly: XxxDevicesService, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null.
===
LOG: Este vínculo começa no contexto de carregamento padrão.
LOG: Usando o arquivo de configuração do aplicativo: c: \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe.Config
LOG: Usando o arquivo de configuração do host:
LOG: Usando o arquivo de configuração da máquina de C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config.
LOG: Política que não está sendo aplicada à referência neste momento (associação de assembly privada, personalizada, parcial ou baseada em localização).
LOG: Tentando baixar o novo arquivo URL: /// c: /TeamE/bin/Release/XxxDevices.DLL.
ERR: Falha ao concluir a configuração da montagem (hr = 0x8007000b). Sondagem encerrada.
StackTrace:
em XxxDevicesService.Program.Main (String [] args)
em System.AppDomain._nExecuteAssembly (montagem RuntimeAssembly, String [] args)
em Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()
em System.Threading.ExecutionContext.Run (ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
em System.Threading.ExecutionContext.Run (ExecutionContext executionContext, ContextCallback callback, Object state)
em System.Threading.ThreadHelper.ThreadStart ()
InnerException:
XxxDevicesService? É compilado para uma plataforma específica (por exemplo, 32 bits)? Nesse caso, você deve compilar sua plataforma para 32 bits.
