Visual Studio 2010을 사용하고 전체 .NET Framework 4를 대상으로하는 C #으로 작성된 Windows 서비스가 있습니다. 디버그 빌드에서 실행하면 서비스가 예상대로 실행됩니다. 그러나 릴리스 빌드에서 실행하면 System.BadImageFormatException이 발생합니다 (아래 세부 정보). 나는 인터넷에서 해결책을 찾고 있었지만 지금까지 내가 찾은 모든 것이 해결책을 찾는 데 도움이되지 않았습니다.
이 문제는 Windows 7 64 비트 (dev) 및 Windows XP SP3 32 비트 (대상) 시스템 모두에 존재합니다.
지금까지 시도한 내용은 다음과 같습니다.
- Platform Target과 같은 확인 된 빌드 설정은 모두 동일합니다 (x86).
- 어셈블리 바이너리가 유효한지 확인하기 위해 / verbose 옵션과 함께 peverify를 사용했습니다.
- fuslogvw를 사용하여로드 문제를 찾습니다.
- CheckAsm을 사용하여 누락 된 파일 또는 어셈블리를 찾았습니다.
이 모든 수표는 아무것도 변경하지 않았습니다. 회사 마스터의 비밀을 보호하기 위해 일부 이름이 변경된 다음 예외 정보의 전체 텍스트를 포함했습니다.
System.BadImageFormatException이 처리되지 않았습니다. 메시지 = 파일 또는 어셈블리 'XxxDevices, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null'또는 해당 종속성 중 하나를로드 할 수 없습니다. 잘못된 형식으로 프로그램을로드하려고했습니다. 소스 = XxxDevicesService FileName = XxxDevices, 버전 = 1.0.0.0, Culture = neutral, PublicKeyToken = null FusionLog = 어셈블리 관리자로드 : C : \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll 실행 파일 c : \ Dev \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe에서 실행 --- 자세한 오류 로그는 다음과 같습니다. === 사전 바인딩 상태 정보 === 로그 : 사용자 = XXX 로그 : DisplayName = XxxDevices, 버전 = 1.0.0.0, Culture = neutral, PublicKeyToken = null (완전히 지정됨) 로그 : Appbase = file : /// c : / Dev / TeamE / bin / Release / 로그 : 초기 PrivatePath = NULL 어셈블리 호출 : XxxDevicesService, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null. === LOG :이 바인딩은 기본로드 컨텍스트에서 시작됩니다. 로그 : 응용 프로그램 구성 파일 사용 : c : \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe.Config 로그 : 호스트 구성 파일 사용 : 로그 : C : \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config에서 컴퓨터 구성 파일 사용. LOG : 현재 참조에 정책이 적용되지 않습니다 (개인, 사용자 지정, 부분 또는 위치 기반 어셈블리 바인딩). LOG : 새 URL 파일 다운로드 시도 : ///c:/TeamE/bin/Release/XxxDevices.DLL. 오류 : 어셈블리 설정을 완료하지 못했습니다 (hr = 0x8007000b). 조사가 종료되었습니다. StackTrace : XxxDevicesService.Program.Main (String [] args)에서 System.AppDomain._nExecuteAssembly (RuntimeAssembly 어셈블리, String [] args)에서 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()에서 System.Threading.ExecutionContext.Run (ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)에서 System.Threading.ExecutionContext.Run (ExecutionContext executionContext, ContextCallback callback, Object state)에서 System.Threading.ThreadHelper.ThreadStart ()에서 InnerException :
XxxDevicesService
입니까? 특정 플랫폼 (예 : 32 비트) 용으로 컴파일 되었습니까? 그렇다면 플랫폼을 32 비트로 컴파일해야합니다.