2010-01-20 47 views
8

Tengo una aplicación web que usa Oracle.DataAccess.dll para comunicarse con un db de Oracle. La aplicación web implementada en el sistema de Windows de 32 bits funciona pero no en Windows Server 2008 de 64 bits. He instalado 10204_vista_win2k8_x64_production_db paquete, hace referencia a la DLL instalado (versión 2.102.4.0) del proyecto, pero me sale el siguiente error:Error al usar oracle.dataaccess.dll

No se pudo cargar el archivo o ensamblado 'Oracle.DataAccess, versión = 2.102.4.0, Culture = neutral, PublicKeyToken = 89b483f429c47342 'o una de sus dependencias. El sistema no puede encontrar el archivo especificado.

Respuesta

10

Lo mismo aquí. El ensamblado Oracle.DataAccess no se ejecuta en modo de 64 bits.

Debe establecer el grupo de aplicaciones para su sitio en modo de 32 bits (ir a Configuración avanzada del grupo de aplicaciones y establecer Permitir 32 Aplicaciones Bit a "true")

Si eso no funciona , asegúrese de que su directorio de Oracle (el directorio que contiene todos los dlls de Oracle) se encuentre en la ruta de su sistema. Si olvida eso, obtendrá el mismo error críptico sobre no encontrar Oracle.DataAccess.

EDITAR:

Instalación del cliente de Oracle puede ser un gran dolor. Utilizando el Oracle Instant Client es algo más fácil que instalar el cliente completo, así que esto es lo que suele hacer:

  1. Descargar el Oracle Instant Client
  2. descomprimir el archivo en c: \ Oracle (cualquier otro directorio hará)
  3. abra un símbolo del sistema como administrador
  4. tipo cd \ Oracle
  5. tipo de configuración odp.net20 micarpetapersonal
  6. Haga clic derecho en "Mi PC", "Configuración avanzada del sistema", "Variables de entorno" y añadir el directorio C: \ oracle a la ruta del sistema
  7. Copia el archivo Oracle.DataAccess.dll de c: \ Oracle \ odp.net \ bin \ 2.xa carpeta bin de la aplicación
  8. (optonally) editar el archivo c: \ oracle \ tnsnames.ora
+0

Configuré Activar aplicaciones de 32 bits en verdadero, pero no tuve suerte. Recibo el mismo mensaje de error. ¿Qué más puedo hacer? – Zoliqa

+0

ver mi edición a la respuesta –

+1

Hola Leybaert, ¿Qué quiere decir exactamente con "asegúrese de que su directorio de Oracle (el directorio que contiene todas las DLL de Oracle) esté en la ruta de su sistema"? Instalé ODAC 1020221 que instaló los dlls en el siguiente directorio: e: \ oracle \ product \ 10.2.0 \ client_1 \ ODP.NET \ bin \. Lo extraño es que los dlls no se registran en el GAC por esta instalación, por lo que hice referencia explícitamente al dll del proyecto por su ruta absoluta. De todos modos, recibo el mismo mensaje de error que mencioné en mi publicación anterior. ¿Qué estoy haciendo mal? – Zoliqa

4

voy a darle las respuestas de lo Acabo de pasar por Windows Server 2008 R2, que es un sistema operativo de 64 bits. El conjunto de aplicaciones de bibliotecas que me dieron se desarrolló utilizando .net 3.5 x86 con las bibliotecas DLL más antiguas y me quedé atrapado porque había instalado los clientes x64 más nuevos de Oracle.

Lo que encontré fue lo siguiente: Instale el último cliente x64 de Oracle para Windows Server 2008. Creo que este sería el cliente 2.7.0. Cuando seleccione la instalación, asegúrese de personalizar y seleccionar las bibliotecas .NET. Configura tus archivos de nombres y prueba tus tnsping contra tu origen de datos.

A continuación, si está ejecutando una aplicación de 32 bits, instale la misma versión del cliente para 32 bits. Además, siga la misma rutina de instalación y seleccione la misma casa.

Cuando termine, encontrará que tiene una sola aplicación/producto con dos directorios de clientes (Cliente1 y Cliente2).

si va al directorio de Windows/Assembly encontrará que tiene una referencia a Oracle.DataAccess.dll (x2) con una para x86 y otra para AMD64.

Ahora, dependiendo de si tiene desarrolladores o está desarrollando en la máquina usted mismo, puede estar bien aquí, sin embargo, si están usando controladores anteriores, entonces debe realizar un último paso.

Acceda al directorio app \ name \ product \ version \ client_1 \ odp.net \ publisher policy \ 2.x. Incluido aquí hay dos archivos de política. use gacutil/i para instalar Policy.2.111.Oracle.DataAccess.dll en el GAC. Esto redirigirá las llamadas ODP heredadas de Oracle a las versiones más recientes. Entonces, si alguien desarrolló con el cliente 10g, ahora funcionará con el cliente 11.

Si necesita más información o necesita respuestas a otras preguntas, como activar o desactivar el modo de 32 bits en sus ensamblajes .net, envíeme un correo electrónico.

J Bancos [email protected]

buena suerte.

+0

Problema similar, funcionó como un amuleto – massimogentilini

2

Si no puede tener un cliente Oracle de 32 bits funcionando e instalado de 64 bits, deberá instalar el cliente de 64 bits y tomar el archivo oracle.dataaccess.dll en odp.net desde la carpeta del cliente oracle instalado. Y debe usar este dll e intercambiar la referencia a este archivo en lugar de usar 32 bit dll. (Que es lo que probablemente tenga para el proyecto/solución)

Si tiene un cliente de oráculo diferente, no lo va a hacer trabajo. entonces obtendrás errores como ese. Espero que ayude.

vea la ilustración en Implementing Oracle.Web.dll, Oracle.DataAccess.dll 64-bit failed on Windows Server 2008 with IIS 7.5 32-bit disabled

0

Si está utilizando la versión de 32 bits de Oracle.DataAccess.dll entonces usted tiene que hacer uno de los siguientes:

a) desplegar en un 32- servidor de bits, o

b) Implementar en un servidor de 64 bits con 'Habilitar aplicaciones de 32 bits' en 'verdadero'.

Si está utilizando la versión de 64 bits de Oracle.DataAccess.dll, simplemente tiene que usar un servidor de 64 bits.

El problema es causado por Oracle como el no ofrecen una versión Cualquier CPU de Oracle.DataAccess.dll (probablemente porque tiene porciones no administrados/nativos)

+0

Para que esto funcione (sin advertencias del compilador) en Visual Studio 2012/.NET 4.5 necesitarás Establezca su "cadena" de referencia dll que eventualmente haga referencia a Oracle.DataAccess.dll a x86 o AMD64 (en lugar de AnyCPU) según si está utilizando la versión de 32 bits o 64 bits de Oracle DLL, y luego asegúrese de que ' volver a implementar su aplicación en un servidor de 32 bits/modo o de 64 bits –

+0

o su otra opción es ignorar las advertencias (y permanecer en AnyCPU) y luego intercambiar entre las versiones de 32 bits/64 bits de Oracle .DataAccess.dll según si está implementando su aplicación en un servidor de 32 bits servidor/modo o servidor de 64 bits. –

+0

"Tiene que cambiar el procesador de destino de su proyecto a una de estas CPU. Desafortunadamente, Oracle no tiene una versión de MSIL, por lo que no puede establecer el destino en AnyCPU" http://code.msdn.microsoft.com/windowsdesktop/Oracle-Dataprovider -for-736ad5af –

0

Si lo hace lo siguiente, todo funciona bien 1 Establezca constantemente todos sus dlls en AnyCPU. 2. Asegúrese de que esté instalada la versión adecuada del dll en la máquina en la que se ejecutará el ejecutable (es decir, 32 bits o 64 bits, es decir, el sistema operativo) 3. Ignore las advertencias del compilador de que la versión de 64/32 bits se está utilizando en lugar de una versión de MSIL

Las versiones compiladas se pueden usar tanto en 32 como en 64 bits, siempre que se instale la versión apropiada de oracle dll.

Cuestiones relacionadas