117 votes

Dépannage BadImageFormatException

J'ai un service Windows écrit en C# à l'aide de Visual Studio 2010 et le ciblage .NET Framework 4. Quand je le lance à partir d'une version de Débogage du service s'exécute comme prévu. Cependant, quand je le lance à partir d'une Version de build-je obtenir un Système.BadImageFormatException (détails ci-dessous). J'ai été chercher sur internet une solution, mais jusqu'à présent, chaque chose que j'ai trouvé n'a pas m'a aidé à trouver une solution.

Le problème existe aussi bien sur Windows 7 64 bits (dev) et Windows XP SP3 32 bits (la cible).

Voici ce que j'ai essayé jusqu'à présent:

  • Vérifié construire des paramètres tels que la Plate-forme Cible sont tous les mêmes (x86).
  • Utilisé peverify avec l'option /verbose pour assurer le montage binaires ont été valide.
  • Utilise fuslogvw à regarder pour tous les problèmes de charge.
  • Utilisé CheckAsm pour rechercher des fichiers manquants ou assembiles.

L'ensemble de ces contrôles n'a rien changé. J'ai inclus le texte intégral de l'exception de l'information ci-dessous, avec quelques-uns des noms ont été changés pour protéger les secrets de mon entreprise maîtres.

Système.BadImageFormatException était non gérée
 Message=impossible de charger le fichier ou l'assembly 'XxxDevices, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' ou une de ses dépendances. Une tentative a été faite pour charger un programme avec un format incorrect.
Source=XxxDevicesService
 FileName=XxxDevices, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
 FusionLog=Assemblée manager chargé de: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
L'exécution en vertu de l'exécutable c:\Dev\TeamE\bin\Release\XxxDevicesService.vshost.exe
--- Un journal d'erreurs détaillé de la façon suivante. 

=== Pré-lier les informations d'état ===
JOURNAL: Utilisateur = XXX
JOURNAL: DisplayName = XxxDevices, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
(Complètement spécifié)
JOURNAL: Appbase = file:///c:/Dev/TeamE/bin/Release/
JOURNAL: Initiale PrivatePath = NULL
Appel de l'assemblée : XxxDevicesService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
JOURNAL: Cette liaison commence en charge par défaut le contexte.
JOURNAL: l'Utilisation de fichier de configuration d'application: c:\TeamE\bin\Release\XxxDevicesService.vshost.exe.Config
JOURNAL: l'Utilisation de fichier de configuration d'hôte: 
JOURNAL: l'Utilisation de la machine fichier de configuration de C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
JOURNAL: Politiques ont pas été appliquées de référence à cette époque (privé, personnalisé, partielle, ou de l'emplacement de montage bind).
JOURNAL: la Tentative de téléchargement de la nouvelle URL file:///c:/TeamE/bin/Release/XxxDevices.DLL.
Erreur: Échec pour terminer l'installation de l'assemblée (hr = 0x8007000b). Sondage terminé.

StackTrace:
 au XxxDevicesService.Programme.Main(String[] args)
 au Système.Domaine d'application._nExecuteAssembly(RuntimeAssembly assemblée, String[] args)
 chez Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
 au Système.Le filetage.ExecutionContext.Exécuter(ExecutionContext executionContext, ContextCallback rappel, état de l'Objet, Boolean ignoreSyncCtx)
 au Système.Le filetage.ExecutionContext.Exécuter(ExecutionContext executionContext, ContextCallback rappel, l'état de l'Objet)
 au Système.Le filetage.ThreadHelper.ThreadStart()
 InnerException: 

128voto

Hans Passant Points 475940

Vérifié construire des paramètres tels que la Plate-forme Cible sont tous les mêmes (x86).

Ce n'est pas ce que le rapport de crash dit:

Assemblée manager chargé de: C:\Windows\Microsoft.NET\Framework64

Note le 64 dans le nom, c'est la maison de la version 64 bits du cadre. Définir la Cible de la plateforme de réglage de l' EXE du projet, et non de votre projet de bibliothèque de classes. Le XxxDevicesService EXE du projet détermine le nombre de bits du processus.

12voto

purvin Points 54

Il peut se produire lorsque vous avez modifié la cible cadre de .csproj et d'y revenir en arrière à ce que vous avez commencé avec.

Assurez-vous que 1 si supportedRuntime version="une autre exécution de cs cible du projet" sous démarrage de la balise dans l'app.config.

Assurez-vous 2 Que signifie aussi vérifier les autres généré automatiquement ou d'autres fichiers peuvent être des propriétés de dossier pour voir si il n'y a pas plus de temps d'exécution d'incompatibilité entre ces fichiers et de celui qui est défini .fichier csproj.

Ces peut seulement vous faire économiser beaucoup de temps avant de commencer à essayer des choses différentes avec les propriétés du projet pour résoudre l'erreur.

9voto

user1721431 Points 152

J'ai eu le même problème, même si j'ai 64 bits de Windows 7 et j'ai été chargement d'une DLL 64 bits b/c dans les propriétés du Projet | Build que j'avais "Préfèrent 32 bits" est cochée. (Ne sais pas pourquoi c'est le cas par défaut). Une fois que j'ai décoché que, tout fonctionnait bien

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X