Mam usługę Windows napisaną w C # przy użyciu Visual Studio 2010 i przeznaczoną dla pełnego .NET Framework 4. Kiedy uruchamiam z kompilacji debugowania, usługa działa zgodnie z oczekiwaniami. Jednak po uruchomieniu go z kompilacji wydania otrzymuję wyjątek System.BadImageFormatException (szczegóły poniżej). Szukałem rozwiązania w Internecie, ale jak dotąd wszystko, co znalazłem, nie pomogło mi znaleźć rozwiązania.
Problem występuje zarówno w 64-bitowym (deweloperskim) systemie Windows 7, jak i 32-bitowym (docelowym) systemie Windows XP z dodatkiem SP3.
Oto, czego próbowałem do tej pory:
- Zweryfikowane ustawienia kompilacji, takie jak Platform Target, są takie same (x86).
- Użyto peverify z opcją / verbose, aby upewnić się, że pliki binarne zestawu są prawidłowe.
- Używa fuslogvw do wyszukiwania problemów z ładowaniem.
- Użył CheckAsm do wyszukania brakujących plików lub zestawów.
Wszystkie te kontrole niczego nie zmieniły. Poniżej zamieściłem pełny tekst informacji o wyjątku, a niektóre nazwy zostały zmienione, aby chronić sekrety moich korporacyjnych mistrzów.
System.BadImageFormatException nie został obsłużony
Komunikat = nie można załadować pliku lub zestawu „XxxDevices, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null” lub jednej z jego zależności. Podjęto próbę załadowania programu o nieprawidłowym formacie.
Źródło = XxxDevicesService
FileName = XxxDevices, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null
FusionLog = Menedżer zespołu załadowany z: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll
Uruchomiony pod plikiem wykonywalnym c: \ Dev \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe
--- Następuje szczegółowy dziennik błędów.
=== Informacje o stanie przed wiązaniem ===
LOG: Użytkownik = XXX
LOG: DisplayName = XxxDevices, wersja = 1.0.0.0, kultura = neutralna, PublicKeyToken = null
(W pełni określone)
LOG: Appbase = file: /// c: / Dev / TeamE / bin / Release /
LOG: Początkowa ścieżka PrivatePath = NULL
Wywołanie zestawu: XxxDevicesService, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null.
===
LOG: To powiązanie rozpoczyna się w domyślnym kontekście ładowania.
LOG: Korzystanie z pliku konfiguracyjnego aplikacji: c: \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe.Config
LOG: Korzystanie z pliku konfiguracyjnego hosta:
LOG: Używając pliku konfiguracyjnego komputera z C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config.
LOG: Zasady nie są obecnie stosowane do odwołania (powiązanie zestawu prywatnego, niestandardowego, częściowego lub opartego na lokalizacji).
LOG: Próba pobrania nowego pliku URL: /// c: /TeamE/bin/Release/XxxDevices.DLL.
BŁĄD: nie można ukończyć instalacji zestawu (hr = 0x8007000b). Sondowanie zakończone.
Ślad stosu:
w XxxDevicesService.Program.Main (String [] args)
w System.AppDomain._nExecuteAssembly (zestaw RuntimeAssembly, String [] args)
w Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()
at System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, wywołanie zwrotne ContextCallback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, wywołanie zwrotne ContextCallback, stan obiektu)
w System.Threading.ThreadHelper.ThreadStart ()
InnerException:
XxxDevicesService? Czy jest kompilowany dla konkretnej platformy (np. 32-bitowej)? Jeśli tak, musisz skompilować swoją platformę do wersji 32-bitowej.
