web-dev-qa-db-fra.com

Impossible de charger le fichier ou l'assembly "Oracle.DataAccess" ou l'une de ses dépendances

J'essaie de lancer cette application Web. Le message d'erreur "Impossible de charger le fichier ou l'assembly" Oracle.DataAccess "ou l'une de ses dépendances. Vous avez tenté de charger un programme au format incorrect." Détails d'exception: System.BadImageFormatException. "Impossible de charger le fichier ou l'assembly" Oracle.DataAccess "ou l'une de ses dépendances. Vous avez tenté de charger un programme au format incorrect." Vous trouverez ci-dessous les choses que j'ai déjà essayées.

1) a remplacé toutes les dll Oracle par des dll Oracle 32 bits 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é toutes les dll dépendants des fichiers Oracle, puis ajouté les dll 2.112.3.0 individuellement puis compilé chaque projet

3) Enregistrez la DLL 32 bits sur GAC à l'aide de cette instruction gacutil/i% ORA_HOME4%\odp.net\bin\4\Oracle.DataAccess.dll

gacutil/i% ORA_HOME4%\asp.net\bin\4\Oracle.web.dll

pour les deux déclarations ci-dessus, j'ai copié le fichier gacutil.exe à partir de c:\Program Files (x86)\Microsoft sdk\windows\v7.0A\Bin\NETFX4.0 Tools\X64 vers le lecteur C: \, puis

J'ai exécuté les deux déclarations ci-dessus:

gacutil/i% ORA_HOME4%\odp.net\bin\4\Oracle.DataAccess.dll gacutil/i% ORA_HOME4%\asp.net\bin\4\Oracle.web.dll lorsque j’ai exécuté les deux instructions ci-dessus, j’ai Je ne reçois aucun message, je les ai exécutés dans les fenêtres DOS avec le privilège de l'administrateur.

4) J'ai également supprimé tous les fichiers ASP.net temporaires de cet emplacement.

c:\windows\Microsoft.Net\V4.0.30319\fichiers ASP.net temporaires J'ai également modifié la cible de la plate-forme de génération de l'application Web en X86. À l'origine, il se trouvait à "ANy CPU". par frustration, j’ai aussi essayé de changer la cible de la plate-forme en X64 puis j’ai eu le message d’erreur disant

"Cold ne charge pas le fichier ou l'assemble. Webapp" ou l'une de ses dépendances. Vous avez tenté de charger un programme avec un format incorrect.

IIS n'est pas installé sur mon ordinateur. J'exécute cette application dans Visual Studio 2010 et je pense donc qu'il utilisera le IIS intégré _ fourni avec Visual Studio.

Je passe beaucoup de temps à résoudre ce problème, mais j'obtiens toujours la même erreur encore et encore.

toute aide ou allusion sera hautement appréciée.

25
Anjali5

Avait le problème encore quand je suis passé d'une machine à une autre et que tout a été réinstallé. Dans mon cas, j'utilise des installations Oracle ODP.NET 32 bits et 64 bits.

Lors de la liste des assemblys sur ma nouvelle machine, je me suis retrouvé avec la liste suivante

 C:\Oracle\product\11.2.0\X64\odp.net\bin\4>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

seules les DLL 64 bits sont visibles ici.

 enter image description here

Je ne pouvais pas le voir depuis le fichier web.config, mais celui que j'utilisais était une version 32 bits.

Lors de la vérification de mon ancienne machine avec GACutil, j'ai vu plus de DLL, également celles de X86.

Correction en réappliquant le processus d'enregistrement (les deux versions x32/x64 sont référencées ici)

OraProvCfg.exe /action:gac /providerpath:C:\Oracle\product\11.2.0\x32\ODP.NET\bin\4\Oracle.DataAccess.dll

OraProvCfg.exe /action:gac /providerpath:C:\Oracle\product\11.2.0\x64\ODP.NET\bin\4\Oracle.DataAccess.dll

après cela, Visual Studio était un lapin heureux et a tout compilé pour moi.

2
KriZ

Essayez ceci: ouvrez le Gestionnaire IIS, modifiez les paramètres avancés du pool d’applications, définissez Enable 32 bit Application sur false.

30
user3048209

J'ai trouvé la solution avec les étapes suivantes:

  • supprimer la référence Oracle.DataAcces.dll,
    et ajouter une nouvelle référence à:
    C:\windows\Assembly\GAC\Oracle.DataAccess\X.XXX.X.XX__89b483f429c47342/Oracle.dataaccess.dll
  • Rendre la copie locale = false.

J'espère que ça aide

23
Saikat Daripa

Vous devrez peut-être activer les applications 32 bits dans votre AppPool. Accédez à> 'Pool d'applications' dans IIS => cliquez avec le bouton droit de la souris sur votre pool d'applications => advance setting => 'activer l'application 32 bits' sur true. 

N'oubliez pas de redémarrer votre pool d'applications et votre application correspondante pointant vers ce pool d'applications.

8
Kifayat Ullah

Dans mon cas, le problème suivant a été résolu:

  1. Téléchargement des "Composants d’accès aux données Oracle 32 bits (ODAC) Avec les outils de développement Oracle pour Visual Studio" depuis http://www.Oracle.com/technetwork/topics/dotnet/utilsoft-086879.html
  2. Ensuite, ajoutez la référence Oracle.dataaccess.dll au fichier bin en parcourant l'emplacement du fichier ou simplement à partir de la liste de références dans l'onglet .NET.
2
bax 1188

Pour moi, tout le reste était presque correct, mais mes paramètres de projet ont été modifiés et iisExpress commençait à être utilisé au lieu de IISLocal. Lorsque j'ai changé et que j'ai pointé vers le répertoire virtuel (dans IISLocal), cela a fonctionné à nouveau parfaitement. 

0
Biki

Si vous utilisez IIS Express et VS 2017:

Allez dans les propriétés de l'application Web> onglet Web> section Serveurs> et changez le bitness en x64.

0
ADH

Dans mon cas, j'utilise VS 2010, Oracle v11 64 bits. Je pourrais publier en mode 64 bits (paramètre sur "Tout Cpu" dans la configuration de projet Web) et définir IIS sur Production Server sur une compatibilité de 32 bits sur false (car le serveur est en 64 bits et j'aime bien en profiter).

Ensuite, pour résoudre le problème "Impossible de charger le fichier ou l'assembly 'Oracle.DataAccess'": 

  • Sur le PC local et le serveur est installé Oracle v11, 64 bits.
  • Dans tous les PC de développement local, je fais référence à Oracle.DataAccess.dll (C:\app\utilisateur\produit\11.2.0\client_1\odp.net\bin\4), qui est en 64 bits. 
  • Dans IIS Production Server, je règle False comme compatibilité 32 bits.
  • La référence dans le projet Web à System.Web.Mvc.dll était la version v3.0.0.1 du PC local, toutefois, dans Production, il n’existe que la version Instaled de MVC 3.0.0.0. Ainsi, le correctif fonctionnait localement avec MVC 3.0.0.0 et non 3.0.0.1 et publie à nouveau sur le serveur, et cela fonctionne.
0
Hernaldo Gonzalez

Vous pouvez également télécharger et exécuter le fichier install.bat dans 'ODAC112030Xcopy.Zip' à partir de Téléchargements ODAC (Oracle Data Access Components) 64 bits . Cela a résolu mon problème.

0
Sunil

J'avais besoin d'une version 64 bits de Oracle.dataaccess.dll, mais cela posait des problèmes avec les autres bibliothèques que j'utilisais.

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

J'ai suivi plusieurs étapes ci-dessus. Aller pour faire avancer les paramètres sur le pool de projets pour basculer autoriser 32 bits travaillé mais je ne me suis pas content de le laisser comme ça alors je l'ai réactivé.

Mon projet avait aussi des références qui s'appuyaient sur Elmah et log4net references. J'ai téléchargé la dernière version de ceux-ci et mon projet a été capable de construire et de fonctionner correctement sans toucher au réglage 32 bits de la gestion des pools.

0
Anthony De Souza