2010-01-20 9 views
8

J'ai une application Web qui utilise Oracle.DataAccess.dll pour communiquer avec une base de données Oracle. L'application Web déployée sur le système Windows 32 bits fonctionne mais pas sur Windows Server 2008 64 bits. J'ai installé le paquet 10204_vista_win2k8_x64_production_db, référencé la DLL installée (version 2.102.4.0) à partir du projet, mais j'ai l'erreur suivante:Erreur lors de l'utilisation de oracle.dataaccess.dll

Impossible de charger le fichier ou l'assembly 'Oracle.DataAccess, Version = 2.102.4.0, Culture = neutre, PublicKeyToken = 89b483f429c47342 'ou l'une de ses dépendances. Le système ne peut pas trouver le fichier spécifié.

Répondre

10

Même ici. L'assembly Oracle.DataAccess ne s'exécute pas en mode 64 bits.

Vous devez définir le pool d'applications pour votre site à mode 32 bits (accédez aux paramètres de pool d'applications avancées et un ensemble Permettent des applications 32 bits « True »)

Si cela ne fonctionne pas , assurez-vous que votre répertoire Oracle (le répertoire contenant toutes les DLL Oracle) se trouve dans votre chemin système. Si vous oubliez cela, vous obtenez la même erreur cryptique de ne pas trouver Oracle.DataAccess.

EDIT:

Installation du client Oracle peut être une douleur importante. Utilisation de la Oracle Instant Client est un peu plus facile que l'installation du client complet, donc ce que je fais habituellement:

  1. Télécharger le Oracle Instant Client
  2. Décompressez l'archive dans c: \ oracle (tout autre répertoire fera)
  3. Ouvrez une invite de commande en tant qu'administrateur
  4. Type cd \ oracle
  5. Type configure odp.net20 mon_dossier
  6. Faites un clic droit sur « Poste de travail », « Paramètres système avancés », « Variables d'environnement » et ajouter le répertoire C: \ oracle sur le chemin du système
  7. Copiez le fichier Oracle.DataAccess.dll de c: \ oracle \ odp.net \ bin \ 2.x dans le dossier bin de votre application
  8. (optonally) modifier c: \ oracle \ fichier tnsnames.ora
+0

J'ai défini Activer les applications 32 bits sur true, mais sans succès. Je reçois le même message d'erreur. Que puis-je faire d'autre? – Zoliqa

+0

voir ma modification à la réponse –

+1

Salut Leybaert, Que voulez-vous dire par "assurez-vous que votre répertoire Oracle (le répertoire contenant toutes les DLL Oracle) est dans le chemin de votre système"? J'ai installé ODAC 1020221 qui a installé les dlls dans le répertoire suivant: e: \ oracle \ product \ 10.2.0 \ client_1 \ ODP.NET \ bin \. La chose étrange est que les dll ne sont pas enregistrés dans le GAC par cette installation, donc j'ai référencé explicitement la DLL du projet par son chemin absolu. Quoi qu'il en soit, je reçois le même message d'erreur que j'ai mentionné dans mon post précédent. Qu'est-ce que je fais de mal? – Zoliqa

4

Je vais vous donner les réponses de ce Je viens de passer sur Windows Server 2008 R2 qui est un système d'exploitation 64 bits. La suite d'applications de bibliothèques qui m'a été donnée a été développée en utilisant .net 3.5 x86 avec les anciennes bibliothèques DLL et j'étais bloqué parce que j'avais installé les nouveaux clients x64 d'Oracle. Ce que j'ai trouvé était le suivant: Installez le dernier client x64 d'Oracle pour Windows Server 2008. Je crois que ce serait le client 2.7.0. Lorsque vous sélectionnez l'installation, assurez-vous de personnaliser et de sélectionner les bibliothèques .NET. Configurez vos fichiers tnsnames et testez votre réponse par rapport à votre source de données.

Ensuite, si vous exécutez une application 32 bits, installez la même version du client pour 32 bits. Suivez également la même procédure d'installation et sélectionnez la même maison.Lorsque vous avez terminé, vous constaterez que vous avez une application/un produit unique avec deux répertoires clients (Client1 et Client2). Si vous accédez au répertoire windows/assemblies, vous trouverez une référence à Oracle.DataAccess.dll (x2) avec un pour x86 et un pour AMD64. Maintenant, selon que vous avez des développeurs ou que vous développez sur la machine vous-même, vous pouvez être correct ici, cependant, s'ils utilisent des pilotes plus anciens, alors vous devez effectuer une dernière étape. Accédez au répertoire app \ nom \ produit \ version \ client_1 \ odp.net \ policy \ publisher \ 2.x de l'application. Inclus ici sont deux fichiers de politique. utilisez gacutil/i pour installer Policy.2.111.Oracle.DataAccess.dll dans le GAC. Cela redirigera les appels Oracle ODP hérités vers les versions les plus récentes. Donc, si quelqu'un a développé avec le client 10g, il va maintenant travailler avec le client 11.

Si vous avez besoin de plus de détails ou si vous avez besoin d'autres réponses, comme le basculement du mode 32 bits sur vos assemblages .net, envoyez-moi un e-mail.

J Banks [email protected]

Bonne chance.

+0

Problème similaire, travaillé comme un charme – massimogentilini

2

Si vous ne pouvez pas utiliser le client Oracle 32 bits et que vous l'installez en 64 bits, vous devez installer le client 64 bits et récupérer le fichier oracle.dataaccess.dll sous odp.net depuis le dossier du client Oracle. Et vous devez utiliser cette DLL et d'échanger la référence à ce fichier au lieu d'utiliser 32 bits dll. (Qui est ce que vous avez probablement pour le projet/solution)

Si vous avez différents bits de client Oracle, il ne va pas travail. donc vous aurez des erreurs comme ça. Espérons que cela aide.

Voir illustration Implementing Oracle.Web.dll, Oracle.DataAccess.dll 64-bit failed on Windows Server 2008 with IIS 7.5 32-bit disabled

0

Si vous utilisez la version 32 bits de Oracle.DataAccess.dll alors vous devez faire une des opérations suivantes:

a) Déployer à un 32- serveur binaire, ou

b) Déployer sur un serveur 64 bits avec 'Activer les applications 32 bits' défini sur 'true'. Si vous utilisez la version 64 bits de Oracle.DataAccess.dll, vous devez simplement utiliser un serveur 64 bits.

Le problème est causé par Oracle comme ne propose pas une version AnyCPU de Oracle.DataAccess.dll (probablement parce qu'il a des portions non gérés/indigènes)

+0

Donc, pour que cela fonctionne (sans avertissements du compilateur) dans Visual Studio 2012/.NET 4.5, vous aurez besoin de définir votre référence de chaîne "chaîne" qui référence Oracle.DataAccess.dll en x86 ou AMD64 (au lieu de AnyCPU) selon que vous utilisez la version 32 bits ou 64 bits de la DLL Oracle, puis assurez-vous re déployer votre application sur un serveur 32 bits/mode ou 64 bits –

+0

Ou votre autre option consiste à ignorer les avertissements (et à rester sur AnyCPU), puis à les échanger entre les versions 32 bits/64 bits d'Oracle .DataAccess.dll selon que vous déployez votre application sur un périphérique 32 bits serveur/mode ou serveur 64 bits. –

+0

"Vous devez remplacer le processeur cible de votre projet par l'un de ces processeurs, malheureusement, Oracle n'a pas de version MSIL, de sorte que vous ne pouvez pas définir la cible sur AnyCPU" http://code.msdn.microsoft.com/windowsdesktop/Oracle-Dataprovider -pour-736ad5af –

0

Si vous faites ce qui suit, tout fonctionne bien 1 Réglez systématiquement toutes vos DLL à AnyCPU. 2. Assurez-vous que la version appropriée de la DLL est installée sur la machine sur laquelle l'exécutable sera exécuté (ie 32 bits ou 64 bits c'est à dire OS) 3. Ignorez les avertissements du compilateur que la version a 64/32 bits est utilisé au lieu d'une version MSIL

Les versions compilées peuvent ensuite être utilisées à la fois sur 32 et 64 bits tant que la version appropriée de la DLL d'Oracle est installée.