J'essaie d'installer un service Windows à l'aide d'InstallUtil.exe et j'obtiens le message d'erreur
System.BadImageFormatException: impossible de charger le fichier ou l'assembly '
{xxx.exe}
' ou l'une de ses dépendances. Une tentative a été faite pour charger un programme avec un format incorrect.
Ce qui donne?
EDIT: (Pas par OP) Message complet extrait de dup obtenant beaucoup plus de hits [pour googleability]:
C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319> InstallUtil.exe C: \ xxx.exe Utilitaire d'installation de Microsoft (R) .NET Framework Version 4.0.30319.1 Copyright (c) Microsoft Corporation. Tous les droits sont réservés.
Une exception s'est produite lors de l'initialisation de l'installation: System.BadImageFormatException: impossible de charger le fichier ou l'assembly 'file: /// C: \ xxx.exe' ou l'une de ses dépendances. Une tentative de chargement d'un programme avec un format incorrect a été effectuée.
Assurez-vous que le plus récent Framework (celui avec lequel vous avez compilé votre application) est le premier dans le PATH. Cela a résolu le problème pour moi. (Trouvé sur un forum )
la source
Je pense que vous utilisez la version 64 bits de l'outil pour installer une application 32 bits. J'ai également fait face à ce problème aujourd'hui et j'ai utilisé ce chemin Framework pour répondre.
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319
et il devrait installer votre application 32 bits très bien.
la source
La clé est de définir les paramètres du processeur de correspondance pour le projet qui sont à deux endroits.
Et assurez-vous également que les paramètres d'architecture sont les mêmes dans le menu Test >> Paramètres de test >> Architecture du processeur par défaut >> comme indiqué ci-dessous.
C'est pour VS2013 mais peut-être même pour les autres versions aussi.
Mise à jour - Pour VS2019:
la source
OK, c'est le problème que j'ai eu, et ce qui l'a résolu semble très pertinent pour ce qui précède.
J'utilise Visual Studio 2010 Express. J'ai écrit un service de test qui n'a vraiment rien fait. C'était juste de la pratique pour la vraie chose plus tard.
J'ai écrit le service et essayé de l'installer en utilisant
installutil.exe
et j'ai obtenu l'erreur suivante:Jusqu'à présent, le même que l'auteur original.
L'observation de Ruben ci-dessus à propos de la sortie 32 bits de Visual Studio 2010 a été le sauveur ici.
J'ai utilisé la version 64 bits de
installutil.exe
et bien sûr, la sortie de la version Visual Studio 2010 était 32 bits. Juste pour ajouter un peu de valeur supplémentaire ici, vous pouvez trouver la version 32 bits du dernier framework .NET et son associéinstallutil.exe
dans le dossier C: \ Windows \ Microsoft.NET \ framework . En utilisant cette version duinstallutil.exe
corrigé mon problème; le service installé sans accroc!J'espère que cela aide quelqu'un d'autre là-bas.
la source
Après avoir essayé toutes les solutions mentionnées, j'ai trouvé la configuration
PlatformTarget
ajoutée d'une manière ou d'une autreAnyCPU
dans mon projet .csproj.La suppression de la ligne a fonctionné pour moi.
la source
Processor Architecture for AnyCPU Projects
), tout recommence à fonctionner.J'ai eu ce problème avec un projet WinForms utilisant VS 2015. Ma solution était:
la source
J'ai eu le même problème. J'utilise la commande standard pour l'exécution. Il appelait le ro X64 exécuté contre les tests X86. J'avais besoin de spécifier le X86 et non la version X64 du nunit-runner.
la source
En résumé, Build et Project \ Build \ Platform doivent être définis sur x64 pour pouvoir installer avec succès le service 64 bits sur un système 64 bits.
la source
Mon problème était différent. Cela s'est produit après un arrêt inattendu de ma machine Windows 7. J'ai effectué une solution propre et elle a fonctionné comme prévu.
la source
Dans le cas d'avoir ce message dans les tests en direct , mais pas dans les tests unitaires , c'est parce que les assemblys sélectionnés sont copiés à la volée vers
$(SolutionDir)\.vs\$(SolutionName)\lut\0\0\x64\Debug\
. Mais parfois, quelques assemblys ne peuvent pas être sélectionnés , par exemple, les DLL VC ++ dans le cas de projets d'interopérabilité c ++ / c #.La post-compilation
xcopy
ne résoudra pas le problème, car le fichier copié sera effacé par le moteur de test en direct.La seule solution de contournement à ce jour (28 décembre 2018) est d'éviter les tests en direct et de tout faire dans les tests unitaires avec l'attribut
[TestCategory("SkipWhenLiveUnitTesting")]
appliqué à la classe de test ou à la méthode de test.Ce bogue est observé dans n'importe quel Visual Studio 2017 jusqu'à 15.9.4 et doit être résolu par l'équipe Visual Studio.
la source
Target build x64 Target Server Hosting IIS 64 Bit
Cliquez avec le bouton droit sur l'hébergement appPool exécutant le site Web / l'application Web et définissez l'activation de l'application 32 bits = false.
la source
J'ai été confronté à ce problème aujourd'hui. Dans mon cas, la cible de plate-forme de mon application (avait une référence à une dll 64 bits) était définie sur
AnyCPU
mais laPrefer 32-bit
case à cocher sous la section cible de la plate-forme était cochée par défaut. C'était le problème et tout fonctionnait bien après avoir décoché l'Prefer 32-bit
option.la source
Nous avons trouvé une solution différente à un problème avec le même symptôme:
Nous avons vu cette erreur lorsque nous avons mis à jour le projet de .net 4.7.1 à 4.7.2.
Le problème était que même si nous ne référenions plus System.Net.Http dans le projet, il était répertorié dans la section dependAssembily de notre web.config. La suppression de cette référence et de toute autre référence d'assembly inutilisée du web.config a résolu le problème.
la source
Le problème est que tous,
System.BadImageFormatException: Could not load file or assembly
y compris ceux qui ne sont pas du tout associés,installutil.exe
pointent vers ce fil.Si votre problème est lié à
WindowsBase
ou auxPresentationFramework
dll et que des analyseurs sont installés, assurez-vous de les avoir installés pour tous les projets de votre solution ou pour aucun d'entre eux.Référencez l'ensemble du framework dans le
.csproj
fichier de votre bibliothèque plutôt que les deuxdlls
:Supprimer
bin
etobj
répéter, nettoyer la solution et reconstruire.la source