web-dev-qa-db-fra.com

Impossible de charger le fichier ou l'assembly 'Oracle.DataAccess' ou l'une de ses dépendances. Une tentative a été faite pour charger un programme avec un format incorrect

J'ai installé une application Web sur IIS 7.0 Windows Server 2008 R2 64 bits . Je fais référence à un Oracle.DataAccess.dll; Lorsque j'essaie d'accéder à l'application, le message suivant s'affiche: .__ "Impossible de charger le fichier ou l'assembly 'Oracle.DataAccess' ou l'une de ses dépendances. Vous avez tenté de charger un programme avec un format incorrect." Quelqu'un peut-il m'aider, s'il vous plaît?

14
Smehrt Tonni

Il semble que le processus d'installation du composant Oracle Data Access à l'aide de la version "11.2 Release 3 (11.2.0.2.1) avec Xcopy Deployment" soit rompu. Pour résoudre ce problème, vous devez enregistrer les assemblys manquants dans le GAC. Pour ce faire, exécutez ces commandes à partir d’une console d’administrateur pour cette version spécifique:

md C:\Windows\Assembly\GAC_32\Oracle.DataAccess\4.112.2.0__89b483f429c47342\

copy %Oracle_HOME%\odp.net\bin\4\Oracle.DataAccess.dll C:\Windows\Assembly\GAC_32\Oracle.DataAccess\4.112.2.0__89b483f429c47342\

md C:\Windows\Assembly\GAC_32\Oracle.Web\4.112.2.0__89b483f429c47342\

copy %Oracle_HOME%\asp.net\bin\4\Oracle.web.dll C:\Windows\Assembly\GAC_32\Oracle.Web\4.112.2.0__89b483f429c47342\

Notez que cela enregistre uniquement les ressources de la DLL mais pas celles des autres langues. Donc, si vous utilisez une autre langue que l'anglais (de, es, fr, it, ja, ko, pt-BR, zh-CHS et zh-CHT), vous devez également les enregistrer à l'aide de la ressource correspondante. fichier.

Si Visual Studio est installé sur la machine, vous pouvez également émettre les commandes suivantes:

gacutil /i %Oracle_HOME%\odp.net\bin\4\Oracle.DataAccess.dll
gacutil /i %Oracle_HOME%\asp.net\bin\4\Oracle.web.dll

Remarque: recherchez gacutil.exe dans le dossier d'installation de Visual Studio.

J'espère que cela t'aides.

P.S. Ou vous pouvez essayer ceci .

16
George Netu

J'ai évité d'enregistrer les assemblys 11.2 Release 5 dans le GAC en configurant "Activer les applications 32 bits" pour le pool d'applications sur true .

12
Jeremy Cook
11
Jaanus

Vous devez enregistrer cette dll sur le serveur live à l'aide de GAC util. Vérifiez également si son présent dans le dossier bin ou non. Parfois, les dll manquantes dans le répertoire bin entraînent la même erreur

5
user240141

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'" (parfois, l'erreur "Message d'erreur du compilateur: CS1705: Assembly"): 

  • 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.
4
Hernaldo Gonzalez

Installation de Xcopy pour Windows x64 d'ODAC 11.2 version 3 (11.2.0.2.1) 64 bits à partir de:

http://www.Oracle.com/technetwork/database/windows/downloads/index-090165.html

Corrigé pour moi. Assurez-vous de mettre à jour votre chemin d'accès système à l'étape 4 du fichier Lisez-moi.

3
Ross

La réponse acceptée, publiée par George Netu, m'a aidé à résoudre mon problème, mais j'ai dû bricoler avec des bagatelles supplémentaires:

Description du problème:

Sous C:\Windows\Assembly, j'ai trouvé deux Oracle.DataAccess éléments (dossiers GAC?). Relict, causé par plusieurs installations de client Oracle. Un élément présentait la version 2.112.1.0 mais était réellement version 2.121.2.0 (visible via Propriétés-> Version). Cette incohérence était le bug.

Premières tentatives inutiles:

  • essayé de désinstaller et de réinstaller le client complet Oracle, à la fois dans les versions Runtime/Administrator
  • essayé de redéployer les correctifs .dll
  • essayé de copier les nouveaux assemblages installés dans les temps serveur GAC, comme indiqué dans la réponse acceptée ci-dessus via la commande Invite (mais cela n'a pas résolu l'inadéquation des versions ..)
  • essayé d'utiliser gacutil /i ...

Succès final:

J'ai atterri sur la page msdn Gacutil.exe et j'ai finalement pu supprimer les éléments du dossier C:\Windows\Assembly.

gacutil /u Oracle.DataAccess, Version=2.112.1.0, Culture="Neutral",PublicKeyToken=45e343aae32233ca
gacutil /u Oracle.DataAccess, Version=2.212.2.0, Culture="Neutral",PublicKeyToken=45e343aae3223abc
gacutil /u Oracle.Web, Version=2.112.1.0, Culture="Neutral",PublicKeyToken=45e343aae3223def

Après cela, j’ai répété les deux commandes gacutil /i ... et les deux DLL sont apparues dans des versions cohérentes.

Enfin redémarré l'IIS, et ça marche ..

1
florian.isopp

Oui, c’est un problème assez agaçant auquel j’ai parfois été confronté. Le problème principal est qu’une application Web utilise à tort Oracle.DataAccess.dll 32 bits au lieu de 64 bits, ou dans le cas contraire. Il y a quelques solutions pour cela.

1. Activation des applications 32 bits dans le pool d'applications si votre application est 64 bits et que vous devez exécuter Oracle.DataAccess.dll 32 bits.

Accédez à IIS et activez l'option "Activer les applications 32 bits" dans les paramètres avancés d'un pool d'applications.

2. Correction des dll de référence. 

Le chemin de référence est censé être le chemin de référence système configuré par le processus d'installation Oracle. Cependant, dans certains cas, tels que l'installation ou la mise à jour d'une nouvelle version d'Oracle, les dernières DLL ne mettent pas à jour les anciennes, ou le chemin est modifié, ou une référence n'est pas mise à jour dans le projet d'application Web. Par conséquent, nous devrions corriger la référence Oracle.DataAccess manuellement. 

Accédez à l'application Web et supprimez la référence Oracle.DataAccess. Et ajoutez une nouvelle référence pour Oracle.DataAccess. Il doit être correct Oracle.DataAccess.dll à partir de votre chemin d'installation Oracle. Par exemple: 

C:\Oracle\product\12.2.0\client_1\odp.net\bin\4\Oracle.DataAccess.dll

ODP.NET et incompatibilité DLL non gérée et dépendante Pour imposer l'utilisation de Oracle.DataAccess.dll Assembly avec la version correcte de son DLL non gérées, une exception est générée si Oracle.DataAccess.dll remarque qu'il a chargé une version incompatible d'une personne à charge non gérée DLL.

https://docs.Oracle.com/cd/E11882_01/win.112/e23174/InstallODP.htm#ODPNT152

3. Le moyen simple et rapide (mais la solution ne convient pas) est de remplacer directement un fichier Oracle.DataAccess.dll copié à partir du chemin d'installation Oracle (par exemple: C:\Oracle\product\12.2.0\client_1\odp.net\bin\4 \) dans le dossier Bin de votre application Web.

J'espère que ça vous aidera un peu. Bonne chance.

1
Alex

J'ai eu le même problème.

Je vais aux propriétés du projet en général section set plate-forme cible à 64 bits (x64) et mon problème résolu

0
Hasan Fathi