У меня есть служба Windows, написанная на C#, с использованием Visual Studio 2010 и таргетинг на полную .NET Framework 4. Когда я запускаю из сборки Debug, служба работает как ожидалось. Однако, когда я запускаю его из сборки Release, я получаю System.BadImageFormatException (подробности ниже). Я искал интернет для решения, но до сих пор все, что я нашел, не помогло мне найти решение.Устранение неполадок BadImageFormatException
Проблема существует как для 64-разрядных (dev), так и для Windows XP SP3 32-разрядных (целевых) систем.
Вот что я пытался до сих пор:
- Проверенно строят такие параметры, как целевая платформа все же (x86).
- Использовать peverify с опцией/verbose, чтобы убедиться, что биты для сборки были действительными.
- Использование fuslogvw для поиска любых проблем с загрузкой.
- Используется CheckAsm для поиска недостающих файлов или сборок.
Все эти проверки ничего не изменили. Я включил полный текст приведенной ниже информации об исключениях, некоторые из названий были изменены для защиты секретов моих корпоративных мастеров.
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:
Что такое xxxDevices? –
Вы вообще смешиваете собственный код/.net? –
Вы на правильном пути, что это исключение связано с различиями бит x86/x64. Я предполагаю, что это не веб-приложение? Кроме того, какой тип сборки «XxxDevicesService»? Скомпилирован ли он для конкретной платформы (например, 32 бит)? Если это так, тогда вы должны скомпилировать свою платформу до 32 бит. – Reddog