У мене служба 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 біт.
