У мене служба Windows написана на C # за допомогою Visual Studio 2010 і орієнтована на повну .NET Framework 4. Коли я запускаюся зі збірки налагодження, служба запускається як очікувалося. Однак, коли я запускаю його з версії версії, я отримую System.BadImageFormatException (детальніше нижче). Я шукав в Інтернеті рішення, але досі кожна річ, яку я знайшла, не допомогла мені знайти рішення.
Проблема існує як у 64-бітній (розробленій) Windows 7, так і в 32-розрядної (цільовій) системі Windows XP SP3.
Ось що я спробував поки що:
- Перевірені параметри збірки, такі як ціль платформи, однакові (x86).
- Використовується Peverify з параметром / verbose, щоб переконатися, що бінарні файли збірки були дійсними.
- Використовує fuslogvw для пошуку будь-яких проблем із завантаженням.
- Використовується CheckAsm для пошуку відсутніх файлів або збірок.
Усі ці перевірки нічого не змінили. Нижче я включив повний текст інформації про виключення, де деякі назви були змінені, щоб захистити секрети моїх корпоративних господарів.
System.BadImageFormatException не оброблено Повідомлення = Не вдалося завантажити файл або збірку "XxxDevices, Версія = 1.0.0.0, Культура = нейтральна, PublicKeyToken = null" або одна з її залежностей. Була зроблена спроба завантажити програму з неправильним форматом. Джерело = XxxDevicesService FileName = XxxDevices, версія = 1.0.0.0, культура = нейтральна, PublicKeyToken = null FusionLog = Менеджер збірок завантажений із: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll Запуск у виконаному файлі c: \ Dev \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe --- Далі йде докладний журнал помилок. === Попередньо зв’язати інформацію про стан === ЛОГ: Користувач = XXX LOG: DisplayName = XxxDevices, версія = 1.0.0.0, культура = нейтральна, PublicKeyToken = null (Повністю вказано) LOG: Appbase = файл: /// c: / Dev / TeamE / bin / Release / LOG: Початковий PrivatePath = NULL Виклик складання: XxxDevicesService, Версія = 1.0.0.0, Культура = нейтральна, PublicKeyToken = null. === LOG: Це прив'язка починається в контексті завантаження за замовчуванням. ЛОГ: Використання файлу конфігурації програми: c: \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe.Config LOG: Використання файлу конфігурації хоста: ЛОГ: Використання файлу конфігурації машини з C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config. LOG: Наразі політика не застосовується для посилання (прив'язка приватної, спеціальної, часткової чи локальної). LOG: Спроба завантаження нового файлу URL: /// c: /TeamE/bin/Release/XxxDevices.DLL. ERR: Не вдалося завершити налаштування збірки (hr = 0x8007000b). Зондування припинено. StackTrace: на XxxDevicesService.Program.Main (Архів String []) на System.AppDomain._nExecuteAssembly (збірка RuntimeAssembly, String [] args) у Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly () на System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, зворотний виклик ContextCallback, стан об'єкта, булева ignoreSyncCtx) в System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, зворотний виклик ContextCallback, стан об'єкта) на System.Threading.ThreadHelper.ThreadStart () InnerException:
XxxDevicesService
? Чи компілюється він для певної платформи (наприклад, 32 біт)? Якщо так, то вам слід скомпілювати свою платформу до 32 біт.