web-dev-qa-db-fra.com

Impossible de charger un fichier ou une exception d'assemblage

Des idées sur ce qui pourrait causer cette exception?

J'ai un service web proj, quand je charge le lien, je reçois

Impossible de charger le fichier ou l'assembly 'Interop.DIB' ou l'une de ses dépendances. Vous avez tenté de charger un programme avec un format incorrect.
Détails des exceptions: System.BadImageFormatException: impossible de charger le fichier ou l'assembly 'Interop.DIB' ou l'une de ses dépendances. Vous avez tenté de charger un programme avec un format incorrect.

Exceptions intérieures:

[BadImageFormatException: impossible de charger le fichier ou l'assembly 'Interop.DIB' ou l'une de ses dépendances. Une tentative de chargement d'un programme avec un format incorrect a été effectuée.]

[ConfigurationErrorsException: impossible de charger le fichier ou l'assembly 'Interop.DIB' ou l'une de ses dépendances. Une tentative de chargement d'un programme avec un format incorrect a été effectuée.]

[HttpException (0x80004005): Impossible de charger le fichier ou l'assembly 'Interop.DIB' ou l'une de ses dépendances. Une tentative de chargement d'un programme avec un format incorrect a été effectuée.]

Information sur la version:
Microsoft .NET Framework Version: 4.0.30319; Version ASP.NET: 4.0.30319.272

27
Sharpeye500

Ok, la réponse est: allez dans Démarrer-> Exécuter-> tapez inetmgr et sur les pools d'applications de gauche, sélectionnez DefaultAppPool et le nom du répertoire virtuel de l'application. et Windows 7 64 bits .enter image description here

80
Sharpeye500

BadImageFormatException signifie généralement un conflit de 64 vs 32 bits. Un des assemblys est défini sur une plate-forme spécifique ], à savoir 64 bits ou 32 bits, tandis que l’autre est défini ou est défini par défaut sur un autre. Vérifiez si les deux assemblages correspondent à la même plate-forme, de préférence "Tout processeur". En d’autres termes, il se peut qu’une Assemblée 64 bits tente de charger une version 32 bits ou inversement.

Ceci s'applique également si vous appelez un COM ou une DLL compilée pour une plate-forme différente, par exemple si vous appelez COM/DLL 32 bits à partir d'un assembly sur un système 64 bits où la plate-forme d'assembly serait définie par défaut sur x64. Dans ce cas, ajustez la plate-forme de votre Assemblée en conséquence.

Pour changer de plate-forme, sélectionnez Propriétés du projet -> Construire -> Plate-forme.

25
Maciej

J'avais ce problème lorsque j'essayais d'utiliser des fichiers .dll 64 bits dans mon projet ASP.Net dans Visual Studio 2013. 

La solution consistait à cliquer sur Outils\Options, puis à cocher cette case:

 enter image description here

8
Mike Gledhill

D'après mon expérience, la cause la plus courante est que vous avez modifié un assemblage référencé qui nécessite de reconstruire d'autres assemblys à l'aide de cet assemblage modifié et que vous ne les avez pas reconstruits.

Exemple n ° 1: vous avez un fichier EXE qui référence une DLL. Vous ajoutez quelque chose à la DLL référencée qui ajoute une nouvelle méthode, un nouveau paramètre, peu importe. Cela modifie la "signature" externe de la DLL; c'est-à-dire l'emplacement dans la mémoire de divers points d'entrée. Vous ne reconstruisez pas le fichier EXE. Lorsque le fichier EXE charge et tente de référencer la nouvelle DLL, son ancien point d'entrée n'est plus valide. Il ne peut donc pas exécuter le code dont il a besoin.

Exemple n ° 2: vous avez un fichier EXE x86 qui référence une DLL. Ce DLL doit également être compilé pour x86 (ou tout processeur). Si vous le reconstruisez pour x64, le fichier EXE, s'exécutant dans un espace 32 bits, ne comprendra pas les instructions et n'enregistrera pas les références au monde "étendu" 64 bits, et pleurera oncle.

3
KeithS

J'ai eu le même problème sur Visual Studio 2015 sur Windows 10 x64. Je compilais déjà en mode Any CPU. C'était une application par défaut de MVC4 (rien n'a été ajouté). J'ai trouvé une solution simple ici qui a fonctionné pour moi: https://github.com/aspnet/Home/issues/524

Dans VS 2015: Outils> Options> Projets et solutions> Projets Web> Utiliser la version 64 bits de IIS Express pour les sites Web et les projets.

2
Andrew Swallows

Si je devais deviner, c'est soit a) ne pas trouver l'assembly interopéré, soit b) le COM DLL n'est pas enregistré dans le registre local. Copier simplement le fichier DIB dans le dossier/bin ne suffit pas lorsque vous effectuez un singe avec COM.

Je crois que (B) est la réponse la plus probable à ce qui se passe.

1
Gregory A Beamer

Mon erreur corrigée, avec changement d'option de construction à:

dans mon projet C # .net Win:

Propriétés> Construire> Cible de la plateforme> 'x86' 

J'ai accidentellement changé sa valeur en "Tout processeur" et j'oublie de le changer.

0
Zolfaghari

Ce travail pour moi, sinon travailler pour vous, ne baissez pas les bras. C'est impoli

Donc, cela fonctionne si je change dans le projet c # de N'importe quel processeur à x86 (toutes les dll. JE travailler sur un pc Win7 64 bits et apparemment si j'utilise un processeur quelconque comme cible ne trouve pas la DLL d'emballage.

https://www.codeproject.com/Questions/358717/Could-not-load-file-or-Assembly-dll-file
0
Trương Long

Une autre solution à ce problème consiste à modifier les propriétés de génération de votre projet. 

Pour vb.net, allez dans Projet -> Propriétés -> Compiler -> Options avancées de compilation. 

0
user3821479

Ce qui a fonctionné pour moi, c’est de faire une mise à jour du BIOS sur ma machine!

0
radkan

J'ai finalement contourné cette exception en supprimant l'entrée dans le fichier applicationhost.config pour IIS Express (C:\Utilisateurs {nom d'utilisateur}\Documents\IISExpress\config\applicationhost.config).

J'avais également arrêté l'instance IIS express, nettoyé et reconstruit dans VS. Ensuite, modifiez le fichier de configuration, puis redémarrez VS 2013.

0
Aligned

Ce qui a fonctionné pour moi a été d’ajouter l’Assemblée à GAC. Pour ce faire, j'ai exécuté gacutil -i PATH_TO_Assembly à partir de l'invite de commande de Visual Studio. 

0
Dublin7