9

Estoy intentando ejecutar una aplicación .NET que usa 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:Cómo decirle a System.Data.OracleClient que use el controlador Oracle de 64 bits

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:

  1. He intentado instalar el cliente de Oracle win64_11gR2_client. Pero durante el proceso de instalación se bloquea sin ningún comentario.
  2. Seguí answer from a different SO thread, intenté y extraje el instantclient-basic-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).
  3. he seguido el "camino alternativo" de this answer y copiar los archivos oci.dll, orannzsbb11.dll, y oraociei11.dll en el cubo/carpeta de mi proyecto de sitio web. Todavía el mismo mensaje de error.
  4. Intenté y copié todos los archivos del cliente instantáneo en ese directorio y volví a intentarlo, sin éxito.
  5. He instalado ODAC112021Xcopy_x64.zip y poner la carpeta de instalación y la carpeta bin en la variable PATH ventanas. Sin éxito.
  6. pongo mi esperanza en this answer y revisó el DllPath en el registro (que se supone en realidad relacionarse con ODP.NET en contraposición a System.Data.OracleClient) y vi que los puntos de DLLPath a la instalación correcta de x64 ODAC, por lo que, si mi aplicación no estaba usando System.Data.OracleClient, debería funcionar, b pero como lo usa, todavía falló.
  7. Busqué en Google y stackoverflew pero no encontré nada más que las publicaciones a las que ya me he referido.
  8. He elaborado cuidadosamente esta pregunta con la esperanza de obtener algún consejo profundo de un usuario SO ilustrado.
  9. Después de conseguir la primera respuesta de b_levitt, probé y añade las siguientes líneas al 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 trataron de force my .NET app into 32bit mode without success, pero eso es una cosa diferente. Necesito una solución con visión de futuro, lo que significa 64 bits.

Respuesta

4

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 my experience with the xcopy install 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 oracle en equipos cliente al manejar toda la lógica de negocios a través de servicios web. De esa manera, solo necesito los componentes del oráculo en el servidor web.

+0

Esto parece prometedor. Lo intentaré cuando regrese al trabajo. De hecho, tengo dos instancias de este problema, una es una ASP.NET y otra es una aplicación de escritorio. – chiccodoro

+0

no debería tener ningún problema de ninguna manera. He tenido suerte con la función SetEnvironmentVariable para ASP.net, Winforms e incluso servicios. Esto, por supuesto, solo es necesario si no desea establecer estas variables en el nivel del sistema. Si este es el único cliente de Oracle en la máquina, simplemente establecería las variables de entorno del sistema ORACLE_HOME y PATH. –

+0

Hola b_levitt. Intenté eso, desafortunadamente todavía recibo el mismo mensaje de error (vea nuevo # 9 en mi pregunta actualizada) – chiccodoro

1

Tuve el mismo problema que tú. Encontré la mayoría de mis respuestas a través de los foros de Oracle y aquí en stackoverflow. No puedo publicar enlaces para referencia pero puedo darte algunas cosas para probar.

  1. También incluya OraOps11w.dll en su directorio bin junto con los otros archivos dll de Oracle.
  2. 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 dependiendo de qué marco versión que el proyecto está usando.
  3. ** 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.

Ver 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.

Cuestiones relacionadas