Ne pouvait pas charger le fichier ou l'assemblage " Oracle.DataAccess" ou l'une de ses dépendances
j'essaie d'exécuter cette application web. Je reçois cette erreur "Ne pouvait pas charger le fichier ou l'assemblage" Oracle.DataAccess" ou l'une de ses dépendances. Une tentative a été faite pour charger un programme avec un format incorrect." Détails de l'Exception: système.BadImageFormatException. "Ne pouvait pas charger le fichier ou l'assemblage" Oracle.DataAccess" ou l'une de ses dépendances. Une tentative a été faite pour charger un programme avec un format incorrect." Ci-dessous sont les choses que j'ai déjà essayé.
1) remplacé tous les la dll oracle avec 32 bit Oracle dll I. e 2.112.3.0
j'ai un client 32 bits installé sur une machine 64 bits. Le système d'exploitation est windows 7.
2) compiler chaque projet individuellement. Supprimé tous les fichiers Oracle dépendants dll, puis ajouté les dll 2.112.3.0 individuellement, puis compilé chaque projet
3) Enregistrer la dll 32 bits sur GAC en utilisant cette déclaration gacutil / i %ORA_HOME4%odp.netbin4Oracle.DataAccess.dll
gacutil / i %ORA_HOME4%asp.netbin4oracle.web.dll
pour les deux énoncés ci-dessus, j'ai copié le gacutil.exe de c:Program fichiers (x86)Microsoft sdkwindowsv7.0aBinNETFX4.0 Outils X64 pour le disque C:, puis
j'ai exécuté les deux ci-dessus énoncé:
gacutil / i %ORA_HOME4%odp.netbin4Oracle.DataAccess.dll gacutil / i %ORA_HOME4%asp.netbin4oracle.web.dll quand j'ai réalisé ces deux déclarations, Je n'ai pas reçu de message, je les ai exécutées sous Windows Dos sous le privilège administrateur.
4) j'ai aussi supprimé tous les temporaires ASP.net fichiers de cet emplacement
c:windowsMicrosoft.NetV4.0.30319temporary ASP.net dossiers J'ai également changé la cible de plate-forme de construction d'application web à X86, à l'origine, il était à "N'importe quel CPU". par frustration, j'ai également essayé de changer la cible de la plate-forme à X64 et puis j'ai eu le message d'erreur disant
" Froid ne pas charger le fichier ou l'assembler . webapp" ou une de ses dépendances. Une tentative a été faite pour charger un programme avec un format incorrect.
je n'ai pas de IIS est installé sur mon ordinateur, je suis en cours d'exécution de cette application dans visual studio 2010 donc je pense que ce sera à l'aide de la fonction intégrée de IIS qui est fourni avec visual studio.
je passe beaucoup d'heures à la résolution de ce problème, mais toujours la même erreur encore et encore.
toute aide ou conseil sera fortement appréciée.
10 réponses
J'ai eu le problème à nouveau quand je suis passé d'une machine à l'autre et que tout a été réinstallé. Dans mon cas, j'utilise à la fois 32bit et 64bit Oracle ODP.NET installe.
Lors de l'inscription assemblées sur ma nouvelle machine, j'ai fini avec la liste suivante
C:\oracle\product.2.0\X64\odp.net\bin>gacutil /l|findstr Oracle.DataAccess
Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
Policy.2.102.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
Policy.2.111.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
Policy.2.112.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
Policy.4.112.Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
Je n'ai pas pu le voir sur le web.config mais celui que j'utilisais était en 32 bits version.
en vérifiant mon ancienne machine avec le GACutil, j'ai vu plus de DLLs, aussi les X86.
corrigé par une nouvelle application du processus d'enregistrement (les deux versions de x32/x64 référencées ici)
OraProvCfg.exe /action:gac /providerpath:C:\oracle\product.2.0\x32\ODP.NET\bin\Oracle.DataAccess.dll
OraProvCfg.exe /action:gac /providerpath:C:\oracle\product.2.0\x64\ODP.NET\bin\Oracle.DataAccess.dll
après cela , Visual Studio était un lapin heureux et a compilé tout à nouveau pour moi.
essayez ceci: ouvrez IIS Manager, modifiez le paramètre advance de l'application pool, modifiez Enable 32 bit Application En false.
j'ai trouvé la solution avec les étapes suivantes:
- supprimer
Oracle.DataAcces.dll
référence
et d'ajouter une nouvelle référence à:C:\windows\assembly\GAC\Oracle.DataAccess\X.XXX.X.XX__89b483f429c47342/oracle.dataaccess.dll
- Faire une copie locale= false.
j'Espère que ça aide
vous devrez peut-être activer les applications 32 bits dans votre AppPool. Allez à > ' Application Pool 'dans IIS = > clic droit sur votre application pool = > advance setting = >' enable 32 bit application ' à true.
n'oubliez pas de redémarrer votre pool d'applications et votre application correspondante pointant vers ce pool d'applications.
Dans mon cas, les personnes suivantes ont résolu le problème:
- Télécharger les " 32-bit Oracle Data Access Components (ODAC) avec Oracle Developer Tools for Visual Studio " de http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html
- puis Ajouter la référence
oracle.dataaccess.dll
bin
fichier en parcourant l'emplacement du fichier ou tout simplement à partir de la liste de références dans.NET
onglet.
Aussi, vous pouvez télécharger et exécuter l'installation.bat file in ' ODAC112030Xcopy.zip' 64-bit Oracle Data Access Components (ODAC) téléchargements. Cela a résolu mon problème.
dans mon cas, J'utilise VS 2010, Oracle v11 64 bits. Je pourrais publier en mode 64 bits (paramétrage à "N'importe quel mode Cpu" dans la configuration de projet Web) et je pourrais définir IIS sur le serveur de Production à 32 bits compactable à false (parce que le serveur est 64 bits et j'aime en profiter).
alors pour résoudre le problème "ne pouvait pas charger le fichier ou l'assemblage' Oracle.DataAccess'":
- dans le PC Local et le serveur est installé Oracle v11, 64 bits.
- Dans tous les PC Dev Local I référence à Oracle.DataAccess.dll (C:\app\user\product\11.2.0\client_1\odp.net\bin\4) qui est 64 bit.
- dans IIS Production Server, j'ai mis la compatibilité 32 bits À False.
- La référence dans le projet web au Système.Web.Mvc.dll était la version v3.0.0.1 dans le PC local, cependant dans la Production est seulement instaled MVC version 3.0.0.0. Donc, la solution était de travailler localement avec MVC 3.0.0.0 et pas 3.0.0.1 et publier à nouveau sur le serveur, et cela fonctionne.
pour moi tout le reste était presque ok, mais d'une certaine manière mes paramètres de projet ont changé et iisExpress était utilisé à la place de IISLocal. Quand j'ai changé et pointé vers le répertoire virtuel (dans IISLocal), il a regardé fonctionner parfaitement à nouveau.
si vous utilisez IIS Express et VS 2017:
allez à la section Propriétés de L'Application Web > onglet Web > serveurs > et changez le Bitness en x64.
j'avais besoin d'une version 64 bits d'oracle.dataaccess.dll, mais cela a causé des problèmes avec d'autres bibliothèques que j'utilisais.
[BadImageFormatException: ne pouvait pas charger le fichier ou assembler 'Oracle.DataAccess' ou l'une de ses dépendances. Une tentative a été faite pour charger un programme avec un format incorrect.]
j'ai suivi plusieurs étapes ci-dessus. Aller à l'avance les paramètres sur le pool de projets à bascule autoriser 32bit a fonctionné, mais je n'étais pas content de le laisser comme ça donc je me suis tourné sur le dos.
mon projet comportait également des références qui reposaient sur Elmah et log4net références. J'ai téléchargé la dernière version de ceux-ci et mon projet a été en mesure de construire et de fonctionner correctement sans toucher au réglage de 32bit de la piscine.