Ne pouvait pas charger file 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 installé une application Web sur IIS 7.0 Windows Server 2008 R2 64bit. Je me réfère à un oracle.DataAccess.DLL; Lorsque j'essaie d'accéder à l'application, j'obtiens le message suivant: "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." Quelqu'un peut-il m'aider, s'il vous plaît?
8 réponses
il semble que le processus D'installation du composant D'accès aux données Oracle utilisant la version "11.2 Release 3 (11.2.0.2.1) with Xcopy Deployment" est cassé. Pour corriger cela, vous devez enregistrer les assemblages manquants dans le GAC. Pour ce faire, exécutez ces commandes depuis une console d'administrateur:
md C:\Windows\assembly\GAC_32\Oracle.DataAccess.112.2.0__89b483f429c47342\
copy %ORACLE_HOME%\odp.net\bin\Oracle.DataAccess.dll C:\Windows\assembly\GAC_32\Oracle.DataAccess.112.2.0__89b483f429c47342\
md C:\Windows\assembly\GAC_32\Oracle.Web.112.2.0__89b483f429c47342\
copy %ORACLE_HOME%\asp.net\bin\oracle.web.dll C:\Windows\assembly\GAC_32\Oracle.Web.112.2.0__89b483f429c47342\
notez que ceci n'enregistre que les ressources DLL mais pas les 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), alors vous devez les enregistrer aussi bien en utilisant le fichier de ressources correspondant.
si vous avez Visual Studio installé sur la machine, vous pouvez émettre les commandes suivantes à la place:
gacutil /i %ORACLE_HOME%\odp.net\bin\Oracle.DataAccess.dll
gacutil /i %ORACLE_HOME%\asp.net\bin\oracle.web.dll
Note: cherchez gacutil.exe sous le dossier D'installation de Visual Studio pour it.
J'espère que cela vous aidera.
j'ai évité d'enregistrer les assemblages 11.2 Release 5 dans le GAC par paramétrage "Enable 32-bit Applications" pour le pool d'applications à true.
vous devrez peut-être activer les applications 32 bits dans votre AppPool.
vous devez enregistrer cette dll sur le serveur en direct en utilisant GAC util. Vérifiez également si son présent dans le dossier bin ou pas. Certaines fois, l'absence de dll dans le répertoire bin entraîne la même erreur
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' "(apparaît parfois le Message D'erreur" Compiler: CS1705: Assembly " error):
- dans le PC Local et le serveur est installé Oracle v11, 64 bits.
- dans tous les PC Dev locaux je fais 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.
Installation de 64 bits ODAC 11.2 Version 3 (11.2.0.2.1) Xcopy pour Windows x64 à partir de:
http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html
réparé pour moi. Assurez-vous de mettre à jour votre chemin système selon l'étape #4 dans le fichier readme.
La accepté de répondre, publié par George Netu aidé à résoudre mon problème, mais j'ai eu à jouer avec quelques autres bagatelles:
description du Problème:
C:\Windows\assembly, j'ai trouvé deux Oracle.DataAccess éléments(GAC-dossiers?). Relique, causé par plusieurs installations du client Oracle. Un élément de la Version 2.112.1.0 était en fait, version 2.121.2.0 (visible à travers Propriétés - > Version). Cette incohérence était le bug.
premières tentatives infructueuses:
- a essayé de désactiver et de réinstaller le client complet D'Oracle, les deux versions de Runtime / Administrator
- essayé de redéployer les corriger .dll
- essayé de copier les nouveaux assemblages installés dans les temps Server Gac, comme indiqué dans la réponse acceptée ci-dessus via l'invite de commande (mais cela n'a pas résolu la version incompatibilité..)
- essayé d'utiliser
gacutil /i ...
succès Final:
j'ai atterri sur le Gacutil.exe msdn page et ont finalement pu supprimer les éléments de la C:\Windows\assembly dossier.
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, j'ai répété les deux gacutil /i ...
les commandes et les deux dlls y sont apparus dans des versions cohérentes.
enfin redémarré L'IIS, et il fonctionne..
Oui, c'est un problème assez ennuyeux auquel j'ai parfois fait face. Le problème principal est qu'une application web utilise à tort Oracle 32 bits.DataAccess.dll au lieu de 64 bits, ou dans le cas inverse. Il existe quelques solutions pour cela.
1. Permettre des applications 32 bits dans le pool d'applications si votre application est 64 bits et doit exécuter Oracle 32 bits.DataAccess.DLL.
allez à L'IIS et définissez true pour" Enable 32-Bit Applications " option dans les paramètres avancés de un pool d'Applications.
2. Correction de la dll de référence.
le chemin de référence est censé être le chemin de référence du système configuré par le processus D'Installation D'Oracle. Mais, dans certains cas tels que l'installation ou la mise à jour de la nouvelle version D'Oracle, la dernière version de DLLs ne met 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 Oracle.Référence DataAccess manuellement.
Aller sur le web application et supprimer Oracle.Référence DataAccess. Et ajouter une nouvelle référence pour Oracle.DataAccess. Ce doit être le bon 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 L'inadéquation DLL non gérée et dépendante Pour appliquer l'utilisation de Oracle.DataAccess.dll Assemblée avec la version correcte de son DLLs non gérées, une exception est soulevée si Oracle.DataAccess.DLL remarque qu'il a chargé une version non appariée d'une personne dépendante non gérée DLL.
https://docs.oracle.com/cd/E11882_01/win.112/e23174/InstallODP.htm#ODPNT152
3. Moyen facile et rapide (mais pas la bonne solution) pour corriger le problème est que outrepasser directement un Oracle.DataAccess.copie de fichier dll à partir du chemin d'installation d'oracle (par exemple: C:\Oracle\product\12.2.0\client_1\odp.net\bin\4\) to Bin folder of votre application web.
j'Espère que cela vous aide un peu. Bonne chance.