windows 7 - instant - Cómo decirle a System.Data.OracleClient que use el Controlador Oracle de 64 bits
system data oracleclient 8.1 7 (2)
Estoy tratando de ejecutar una aplicación .NET que utiliza System.Data.OracleClient
en una estación de trabajo Win7 x64. La estación de trabajo tiene un cliente Oracle de 32 bits instalado, que lleva al siguiente mensaje de error:
El intento de cargar las bibliotecas cliente de Oracle arrojó BadImageFormatException. Este problema ocurrirá cuando se ejecuta en modo de 64 bits con los componentes de cliente de Oracle de 32 bits instalados.
Así que este es mi largo viaje de intentos y fracasos:
- Intenté instalar el cliente de Oracle win64_11gR2_client . Pero durante el proceso de instalación se bloquea sin ningún comentario.
- Seguí una respuesta de un hilo SO diferente , intenté y extraje elclientecliente-básico-windows.x64-11.2.0.2.0 , y puse la carpeta que contiene los binarios en la variable PATH de Windows. Todavía recibo el mismo mensaje de error (incluso después de reiniciar).
- Seguí el "camino alternativo" de esta respuesta y copié los archivos oci.dll, orannzsbb11.dll y oraociei11.dll en el bin / carpeta de mi proyecto de sitio web. Todavía el mismo mensaje de error.
- Intenté y copié todos los archivos del cliente instantáneo en ese directorio e intenté de nuevo, sin éxito.
- Instalé ODAC112021Xcopy_x64.zip y puse la carpeta de instalación y la carpeta bin en la variable PATH de Windows. Sin éxito.
- Puse mi esperanza en esta respuesta y revisé el DllPath en el registro (que en realidad se supone que se relaciona con ODP.NET en oposición a
System.Data.OracleClient
) y vi que DllPath apunta a la instalación x64 correcta de ODAC, por lo tanto, si mi aplicación no estaba usandoSystem.Data.OracleClient
, debería funcionar, b pero como lo usa, aún falló. - Busqué en Google y stackoverflew pero no encontré nada más que las publicaciones a las que ya me referí.
- Con cuidado, elaboré esta pregunta con la esperanza de obtener algún consejo profundo de un usuario SO ilustrado.
Después de obtener la primera respuesta de b_levitt, probé y agregué las siguientes líneas a Global.asax en
Application_Start
:Environment.SetEnvironmentVariable("ORACLE_HOME", @"C:/OracleProducts/Odac-11.2.0.2.1-x64"); Environment.SetEnvironmentVariable("PATH", @"C:/OracleProducts/Odac-11.2.0.2.1-x64;C:/OracleProducts/Odac-11.2.0.2.1-x64/bin");
C: / OracleProducts / Odac-11.2.0.2.1-x64 es donde instalé la versión de ODAC 64 bit xcopy. Sin éxito tampoco.
En una nota relacionada, incluso intenté forzar mi aplicación .NET en el modo de 32 bits sin éxito , pero eso es algo diferente. Necesito una solución con visión de futuro, lo que significa 64 bits.
Su número 5 debería haber funcionado, pero también debe establecer la variable de entorno ORACLE_HOME. He hecho esto muchas veces, incluso recientemente con la instalación de xcopy que está utilizando. Consulte mi experiencia con la instalación de xcopy y dígame qué tipo de errores adicionales obtiene.
En mi caso, lo estaba configurando para asp.net, pero las formas de ganar son aún más fáciles. Puede abrir una ventana de cmd, usar el comando "set" para establecer las variables de entorno PATH y ORACLE_HOME y luego ejecutar su aplicación desde la misma ventana de cmd. Una vez que obtenga los errores solucionados, puede usar Environment.SetEnvironmentVariable para configurarlos dentro de su código.
Para el registro, evito instalar el cliente de Oracle en las máquinas cliente al manejar toda la lógica de negocios a través de los servicios web. De esa manera, solo necesito los componentes del oráculo en el servidor web.
Tuve el mismo problema que tienes. Encontré la mayoría de mis respuestas a través de los foros de Oracle y aquí en . No puedo publicar enlaces para referencia pero puedo darte algunas cosas para probar.
- Incluya también OraOps11w.dll en su directorio bin junto con los otros archivos dll de Oracle.
- Vaya a las propiedades del proyecto | Rutas de referencia, agregue C: / Windows / Microsoft.NET / Framework64 / v2.0.50727 o C: / Windows / Microsoft.NET / Framework64 / v4.0.30319 a las rutas de Referencia según la versión del marco del proyecto esta usando.
- ** Parte borrosa que no recuerdo bien: elimine la referencia actual de System.Data.OracleClient y agregue la nueva referencia de C: / Windows / Microsoft.NET / Framework64 / v2.0.50727 o C: / Windows / Microsoft.NET / Framework64 / v4.0.30319 a las rutas de Referencia en función de la versión de marco que esté usando el proyecto.
Vea si la excepción desaparece.
Para su información, Microsoft está retirando el soporte del proveedor de datos Oracle (en ADO.NET) en el futuro cercano. Actualmente funciona a través de .NET 4, pero es una buena idea comenzar a probar los controladores nativos de Oracle.