У меня есть служба Windows, написанная на C # с использованием Visual Studio 2010 и ориентированная на полную .NET Framework 4. Когда я запускаю отладочную сборку, служба работает, как ожидалось. Однако, когда я запускаю его из сборки Release, я получаю System.BadImageFormatException (подробности ниже). Я искал в Интернете решение, но пока все, что я нашел, не помогло мне найти решение.
Проблема существует как в 64-битной Windows 7 (для разработчиков), так и в 32-битной (целевой) Windows XP SP3.
Вот что я пробовал до сих пор:
- Проверенные настройки сборки, такие как Platform Target, одинаковы (x86).
- Используется peverify с параметром / verbose, чтобы убедиться, что двоичные файлы сборки действительны.
- Использует fuslogvw для поиска проблем с загрузкой.
- Используется CheckAsm для поиска недостающих файлов или сборок.
Все эти проверки ничего не меняли. Я включил полный текст информации об исключениях ниже, при этом некоторые имена изменены, чтобы защитить секреты моих корпоративных хозяев.
System.BadImageFormatException не обработан Сообщение = Не удалось загрузить файл или сборку «XxxDevices, Версия = 1.0.0.0, Культура = нейтральный, PublicKeyToken = null» или одну из их зависимостей. Была сделана попытка загрузить программу с неправильным форматом. Источник = XxxDevicesService FileName = XxxDevices, Version = 1.0.0.0, Culture = нейтральный, 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, культура = нейтральная, PublicKeyToken = null (Полностью указано) ЖУРНАЛ: Appbase = file: /// c: / Dev / TeamE / bin / Release / ЖУРНАЛ: начальный частный путь = NULL Вызывающая сборка: XxxDevicesService, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null. === LOG: эта привязка начинается в контексте загрузки по умолчанию. ЖУРНАЛ: Использование файла конфигурации приложения: c: \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe.Config ЖУРНАЛ: Использование файла конфигурации хоста: ЖУРНАЛ: использование файла конфигурации компьютера из C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config. ЖУРНАЛ: Политика не применяется к ссылке в настоящее время (частное, настраиваемое, частичное или привязка сборки на основе местоположения). ЖУРНАЛ: Попытка загрузки нового файла URL: /// c: /TeamE/bin/Release/XxxDevices.DLL. ОШИБКА: не удалось завершить настройку сборки (hr = 0x8007000b). Зондирование прекращено. Трассировки стека: в XxxDevicesService.Program.Main (String [] args) в System.AppDomain._nExecuteAssembly (сборка RuntimeAssembly, String [] args) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly () в System.Threading.ExecutionContext.Run (контекст выполнения ExecutionContext, обратный вызов ContextCallback, состояние объекта, логическое значение ignoreSyncCtx) в System.Threading.ExecutionContext.Run (контекст выполнения ExecutionContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadHelper.ThreadStart () InnerException:
XxxDevicesService
? Скомпилирован ли он для конкретной платформы (например, 32 бит)? Если да, то вы должны скомпилировать свою платформу до 32 бит.