Impossible de charger le fichier ou l'assemblage ... une tentative a été faite pour charger un programme avec un format incorrect (système.BadImageFormatException)
J'ai deux projets, ProjectA
et ProjectB
. ProjectB
est une application console, qui dépend de ProjectA
. Hier, tout fonctionnait bien, mais soudainement aujourd'hui quand je cours ProjectB
je reçois ceci:
BadImageFormatException n'a pas été gérée :
Impossible de charger le fichier ou l'assembly 'ProjectA, 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.
Les deux sont juste projets réguliers, sans dépendances sur aucun autre non-.Net projets. Les deux sont entièrement. net - il n'y a pas de code natif, et pas de P / Invoke. J'ai d'autres projets qui dépendent de ProjectA
et fonctionnent toujours très bien.
Ce que j'ai essayé:
- assurez-vous que les deux projets sont définis sur "N'importe quel CPU", avec la case à cocher build cochée. Elles le sont.
- assurez-vous que les deux projets sont pour le même Framework cible (. Net 4.0 Client Profile).
- Sous Projetb --> Références --> ProjectA --> Propriétés, assurez - "Copie Locale" est définie sur "Vrai" _ (j'ai vérifié que ProjectA.la dll est copiée correctement)
- nettoyer / reconstruire la solution. J'ai même essayé de supprimer manuellement les dossiers / bin et / obj dans les deux projets.
- Redémarrez Visual Studio. Redémarrez mon ordinateur.
- découvrez une copie entièrement nouvelle du référentiel.
Mais je reçois toujours la même erreur. Je n'ai aucune idée de ce que j'ai fait cause de cela, ni comment le résoudre. Des idées?
21 réponses
Je suis sûr que vous avez un conflit 32 bits / 64 bits. Il semble que votre projet principal puisse être défini sur 32 bits alors que la classe dont il fait référence est définie sur 64 bits. Essayez de regarder cette question SO et celle-ci aussi. Entre les deux d'entre eux, vous devriez être en mesure de comprendre votre problème.
Peut-être que vous rencontrez le problème avec votre site web après le déploiement sur le serveur.
Ensuite, vous devez ajuster votre pool d'applications pour activer les Applications 32 bits.
Étapes:
- ouvrir le Gestionnaire IIS
- Cliquez sur Pools D'Applications
- Sélectionnez le pool d'applications que vous utilisez
- dans le volet de droite, cliquez sur Paramètres avancés...
- définissez activer les Applications 32 bits sur True
Je viens d'avoir ce message d'erreur exécutant IIS Express Dans Visual Studio 2015. Dans mon cas, j'avais besoin d'exécuter la version 64 bits D'IIS Express:
Outils -> Options -> projets et Solutions - > projets Web
Cochez la case cela dit " Utilisez la version 64 bits D'IIS Express pour les sites web et projet".
Capture d'écran:
J'ai eu ce problème en exécutant des tests unitaires (xunit) dans Visual Studio 2015 et je suis tombé sur le correctif suivant:
Menu Bar -> Test -> Test Settings -> Default Processor Architecture -> X64
Vous devrez peut-être modifier le paramètre appication Pool "Activer les Applications 32 bits" sur TRUE dans IIS7 si vous avez au moins 1 dll\exe 32 bits dans votre projet.
J'ai eu le même problème avec plusieurs projets dans la même solution, j'ai fini par définir tous les frameworks cibles sur. NET Framework 4 et x86 pour le processeur cible et il a finalement été compilé avec succès.
Vous pouvez également voir ce problème si vous essayez d'empaqueter un projet 64 bits avec un programme D'installation MSI dans VS. ("La raison en est que la cale native est empaquetée avec le .le fichier msi est un exécutable 32 bits.")
Voir ici pour plus de détails: http://blogs.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-actions-with-visual-studio.aspx
AUCUNE de ces solutions n'a fonctionné pour moi-mais en supprimant le contenu des dossiers bin et obj, tout était cool à nouveau.
Je l'ai eu lors de la construction d'un projet via Visual Studio Online (VSTS) en utilisant les étapes Visual Studio Build
.
La solution était:
- supprimer le dossier source existant
- définissez explicitement "N'importe quel processeur" dans la plate-forme pour toutes les versions de Visual Studio, y compris les dépendances (voir capture d'écran ci-dessous).
- relancez la construction
J'ai rencontré le même problème. Il est apparu hors du bleu et qui me semblait étrange.
Dans L'instantané D'Exception, pour le FusionLog, j'ai vu ce qui suit dans son message:
... C:\Windows\Microsoft.NET\Framework64 ...
Plus sur le journal de fusion: http://msdn.microsoft.com/en-us/library/e74a18c4 (v=vs. 110).aspx
Tous les projets avaient un processeur cible de AnyCPU. J'ai changé le projet d'application (le projet qui fait référence à tous les autres projets) à un processeur cible de x86. Il fonctionne maintenant.
Je ne sais pas comment le mélange de CPU cible s'est produit sans raison apparente, mais c'est le cas.
Je suis également confronté à ce problème dans un projet, après quelques minutes, j'ai trouvé la solution, ce problème est dû à la configuration du processeur, Si vous utilisez Visual Studio 2010 ou VS 2013 , allez simplement aux propriétés du projet , puis sélectionnez Compiledans la barre latérale et il y aura 5 déroulants, 5 déroulants seront CPU Cible:, vous devriez le définir sur x86 ou x64 selon vos besoins au lieu de N'importe quel CPU.
Mon problème a été résolu après avoir changé il à x86.
Cela peut également se produire simplement en ayant plusieurs frameworks pris en charge définis dans l'application .config fichier et, forçant l'application à s'exécuter dans un. net framework différent de celui mentionné en premier dans l'application.fichier de configuration .
Et aussi cela se déclenche lorsque vous avez les deux frameworks mentionnés disponibles dans votre système.
Comme solution de contournement, faites apparaître le cadre cible que vous allez utiliser pour le débogage dans l'application.config
Ex: si vous essayer de fonctionner dans. NET 4, le fichier de configuration devrait avoir quelque chose de similaire à ceci,
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
Dans mon projet pour C#, propriété du projet->[Build]- > cible de la plate-forme: tout CPU, et décochez la case préférer 32 bits pour laisser le compilateur choisir automatiquement.
L'assembly Chilkat. net 4.5 nécessite L'installation du runtime VC++ 2012 ou 2013 sur n'importe quel ordinateur sur lequel votre application s'exécute. La plupart des ordinateurs l'auront déjà installé. Votre ordinateur de développement l'aura car Visual Studio a été installé. Cependant, si le déploiement sur un ordinateur où le runtime VC++ requis n'est pas disponible, l'erreur ci-dessus se produira:
Installez tous les paquets ci-dessous
Packages redistribuables Visual C++ pour Visual Studio 2013-vcredist_x64
Packages redistribuables Visual C++ pour Visual Studio 2013-vcredist_x86
Packages redistribuables Visual C++ pour Visual Studio 2012-vcredist_x64
Packages redistribuables Visual C++ pour Visual Studio 2012-vcredist_x86
Tout d'abord, j'ai eu cela dans VS2017 avec un ancien projet dont j'avais besoin pour faire un minuscule changement et upraded tous les projets à framework 4.7.
Plusieurs autres ont mentionné que la sélection de {[0] } peut résoudre ce problème.
Il y a quelques endroits où vous devez le faire, et ce n'est peut-être pas aussi simple que de sélectionner dans la liste déroulante. Cela l'a réparé pour moi:
1) vous devez le faire à la fois ici:
2) et aussi dans Configuration Manager
(clic droit sur la solution)
Mais si elle n'est pas là???
Puis cliquez sur New
et choisissez ces paramètres: (Merci @ Rckrn )
Si vous utilisez LibreOffice à partir de votre programme via l'intégration cli. net comme moi, j'ai eu la même erreur. J'utilise l'ancienne version de LibreOffice sur l'environnement de production sur mon PC j'ai installé une version plus récente qui était en conflit. Il suffit de désinstaller LibreOffice. j'ai trouvé la solution ici . NET CLI: impossible de charger le fichier ou l'assemblage 'cli_cppuhelper'
Cela peut être un peu drôle, mais j'ai eu le même problème avec le code de travail normal. J'ai ajouté StreamWriter et StreamReader et cela a donné cette erreur. La solution était que j'ai pris ce code dans des parenthèses de commentaire puis j'ai débogué et il a commencé à fonctionner à nouveau
J'ai également eu ce problème en exécutant des tests unitaires en utilisant ReSharper sur Visual Studio 2017 et l'ai corrigé avec la configuration suivante:
Vous pouvez également modifier le paramètre run test du ReSharper: https://resharper-support.jetbrains.com/hc/en-us/articles/207242715-How-to-run-MSTest-tests-using-x64-configuration
Ma machine m'a montré une mise à jour du BIOS et je me suis demandé si cela avait quelque chose à voir avec l'apparition soudaine de cette erreur. Et après avoir fait la mise à jour, l'erreur a été résolue et la solution s'est bien construite.
Essayez-vous d'exécuter votre .exe fichier à partir de la cmd? Cela a été mon erreur. Il suffit de lancer le .fichier exe en double-cliquant dessus. Si c'est un.net Core SCD Pour Windows 8.1/Windows Server 2012 R2 x64.