Je viens d'extraire une révision de Subversion vers un nouveau dossier. A ouvert la solution et je l'obtiens à l'exécution:
Impossible de charger le fichier ou l'assembly 'xxxx' ou l'une de ses dépendances. Vous avez tenté de charger un programme avec un format incorrect.
C'est le même code que j'avais enregistré il y a un moment. Pourquoi fait-il cela maintenant? Je vois maintenant aussi un Debug x86 au lieu de Debug dans le dossier bin de ce projet xxx. Qu'est-ce que Debug x86 et pourquoi n'ai-je pas Debug comme dans le dossier bin?
On dirait qu’une partie du projet est construite pour x86 uniquement, tandis que le reste est construit pour n’importe quel processeur/x64. Cela m'a mordu aussi. Avez-vous un x64 (ou euh ... IA64)?
Vérifiez les propriétés du projet et assurez-vous que tout est construit pour "Tout processeur". Si vous êtes dans Visual Studio, vous pouvez tout vérifier en accédant au menu "x86" ou "Any CPU" (à côté du menu "Debug"/"Release") dans la barre d’outils en haut de l’écran et en cliquant sur "Panneau de configuration..."
Si vous obtenez cette erreur lors de l'exécution du site dans IIS 7+ sur des serveurs 64 bits, vous pouvez avoir des assemblys 32 bits et votre pool d'applications aura l'option "Activer les applications 32 bits" définie sur False; Définissez ceci sur true et redémarrez le site pour le faire fonctionner.
inetmgr, puis accédez au pool d’applications-> Paramètres avancés de votre pool-> aura l'option "Activer les applications 32 bits" définie sur true; et redémarrez IIS . à nouveau.!
Assurez-vous de vérifier le paramètre "Préférer 32 bits". Dans mon cas, Visual Studio 2012 avait ce paramètre coché par défaut. Essayer d’utiliser quoi que ce soit d’un DLL externe a échoué jusqu’à ce que je décoche la case "Préfère 32 bits".
L'exception BadImageFormatException sur une application exécutée sur IIS (mais pas à partir de VS, car Visual Studio corrige le problème en utilisant la construction de "Tout processeur") peut être provoquée par les éléments suivants:
Le site est un serveur x64 et le paramètre par défaut du pool d'applications pour Activer les applications 32 bits était False. et vous avez des assemblages 32 bits
Au niveau de Visual Studio, le correctif est le suivant:
C'est certainement un problème avec certains des projets construits pour la compatibilité x86 au lieu de tout processeur. Si je devais deviner, je dirais que certaines des références entre vos projets font probablement référence aux dll dans certains dossiers bin\debug au lieu d'être des références de projet.
Lorsqu'un projet est compilé pour x86 au lieu de 'Any CPU', les dll se placent dans le dossier bin\x86\debug au lieu de bin\debug (ce qui correspond probablement à vos références).
Mais dans tous les cas, vous devriez utiliser des références de projet entre vos projets.