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.