Ich habe einen Windows-Dienst in C # geschrieben, der Visual Studio 2010 verwendet und auf das vollständige .NET Framework 4 abzielt. Wenn ich von einem Debug-Build aus starte, wird der Dienst wie erwartet ausgeführt. Wenn ich es jedoch von einem Release-Build aus starte, erhalte ich eine System.BadImageFormatException (Details unten). Ich habe im Internet nach einer Lösung gesucht, aber bisher hat mir alles, was ich gefunden habe, nicht geholfen, eine Lösung zu finden.
Das Problem besteht sowohl auf Windows 7 64-Bit- (dev) als auch auf Windows XP SP3 32-Bit- (Ziel-) Systemen.
Folgendes habe ich bisher versucht:
- Verifizierte Build-Einstellungen wie Platform Target sind alle gleich (x86).
- Wird peverify mit der Option / verbose verwendet, um sicherzustellen, dass die Assembly-Binärdateien gültig sind.
- Verwendet fuslogvw, um nach Ladeproblemen zu suchen.
- Verwendet CheckAsm, um nach fehlenden Dateien oder Assembiles zu suchen.
Alle diese Überprüfungen haben nichts geändert. Ich habe den vollständigen Text der Ausnahmeinformationen unten eingefügt, wobei einige der Namen geändert wurden, um die Geheimnisse meiner Unternehmensleiter zu schützen.
System.BadImageFormatException wurde nicht behandelt Nachricht = Datei oder Assembly 'XxxDevices, Version = 1.0.0.0, Kultur = neutral, PublicKeyToken = null' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden. Source = XxxDevicesService Dateiname = XxxDevices, Version = 1.0.0.0, Kultur = neutral, PublicKeyToken = null FusionLog = Assembly Manager, geladen aus: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll Wird unter der ausführbaren Datei c: \ Dev \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe ausgeführt --- Es folgt ein detailliertes Fehlerprotokoll. === Statusinformationen vorbinden === LOG: Benutzer = XXX LOG: DisplayName = XxxDevices, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null (Vollständig spezifiziert) LOG: Appbase = Datei: /// c: / Dev / TeamE / bin / Release / LOG: Initial PrivatePath = NULL Aufruf der Assembly: XxxDevicesService, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null. === LOG: Diese Bindung beginnt im Standardladekontext. LOG: Verwenden der Anwendungskonfigurationsdatei: c: \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe.Config LOG: Verwenden der Host-Konfigurationsdatei: LOG: Verwenden der Computerkonfigurationsdatei aus C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config. LOG: Die Richtlinie wird derzeit nicht auf Verweise angewendet (private, benutzerdefinierte, teilweise oder standortbasierte Assemblybindung). LOG: Versuch, eine neue URL-Datei herunterzuladen: /// c: /TeamE/bin/Release/XxxDevices.DLL. ERR: Fehler beim Abschließen der Montage (hr = 0x8007000b). Die Prüfung wurde beendet. StackTrace: at XxxDevicesService.Program.Main (String [] args) at System.AppDomain._nExecuteAssembly (RuntimeAssembly-Assembly, String [] args) bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly () at System.Threading.ExecutionContext.Run (ExecutionContext executeContext, ContextCallback-Rückruf, Objektstatus, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run (ExecutionContext executeContext, ContextCallback-Rückruf, Objektstatus) bei System.Threading.ThreadHelper.ThreadStart () InnerException:
XxxDevicesService
? Ist es für eine bestimmte Plattform kompiliert (zB 32 Bit)? Wenn ja, müssen Sie Ihre Plattform auf 32 Bit kompilieren.