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.