J'ai un service Windows écrit en C # à l'aide de Visual Studio 2010 et ciblant le .NET Framework complet 4. Lorsque je cours à partir d'un débogage, le service s'exécute comme prévu. Cependant, lorsque je l'exécute à partir d'une version Release, j'obtiens une System.BadImageFormatException (détails ci-dessous). J'ai cherché une solution sur Internet, mais jusqu'à présent, tout ce que j'ai trouvé ne m'a pas aidé à trouver une solution.
Le problème existe sur les systèmes Windows 7 64 bits (dev) et Windows XP SP3 32 bits (cible).
Voici ce que j'ai essayé jusqu'à présent:
- Les paramètres de construction vérifiés tels que Platform Target sont tous les mêmes (x86).
- Utilisé peverify avec l'option / verbose pour s'assurer que les binaires d'assembly étaient valides.
- Utilise fuslogvw pour rechercher tout problème de chargement.
- Utilisé CheckAsm pour rechercher des fichiers ou des assemblages manquants.
Tous ces contrôles n'ont rien changé. J'ai inclus le texte intégral des informations d'exception ci-dessous, avec certains des noms modifiés pour protéger les secrets de mes chefs d'entreprise.
System.BadImageFormatException n'a pas été gérée
Message = Impossible de charger le fichier ou l'assembly 'XxxDevices, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' ou l'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 = neutre, PublicKeyToken = null
FusionLog = Gestionnaire d'assemblage chargé depuis: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll
Exécution sous l'exécutable c: \ Dev \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe
--- Un journal d'erreurs détaillé suit.
=== Informations sur l'état de pré-liaison ===
LOG: Utilisateur = XXX
JOURNAL: DisplayName = XxxDevices, Version = 1.0.0.0, Culture = neutre, PublicKeyToken = null
(Entièrement spécifié)
LOG: Appbase = fichier: /// c: / Dev / TeamE / bin / Release /
JOURNAL: Chemin privé initial = NULL
Appel de l'assembly: XxxDevicesService, Version = 1.0.0.0, Culture = neutre, PublicKeyToken = null.
===
LOG: Cette liaison démarre dans le contexte de chargement par défaut.
LOG: Utilisation du fichier de configuration de l'application: c: \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe.Config
LOG: Utilisation du fichier de configuration d'hôte:
LOG: Utilisation du fichier de configuration de la machine à partir de C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config.
LOG: la stratégie n'est pas appliquée à la référence pour le moment (liaison d'assembly privée, personnalisée, partielle ou basée sur l'emplacement).
LOG: tentative de téléchargement du nouveau fichier URL: /// c: /TeamE/bin/Release/XxxDevices.DLL.
ERR: échec de la configuration de l'assemblage (hr = 0x8007000b). Le sondage est terminé.
Trace de la pile:
à XxxDevicesService.Program.Main (String [] args)
à System.AppDomain._nExecuteAssembly (assembly RuntimeAssembly, String [] args)
à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()
à System.Threading.ExecutionContext.Run (ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
à System.Threading.ExecutionContext.Run (ExecutionContext executionContext, rappel de ContextCallback, état de l'objet)
à System.Threading.ThreadHelper.ThreadStart ()
InnerException:
XxxDevicesService? Est-il compilé pour une plate-forme spécifique (par exemple 32 bits)? Si tel est le cas, vous devez compiler votre plate-forme en 32 bits.
