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:
- He intentado instalar el cliente de Oracle win64_11gR2_client. Pero durante el proceso de instalación se bloquea sin ningún comentario.
- 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).
- 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.
- Intenté y copié todos los archivos del cliente instantáneo en ese directorio y volví a intentarlo, sin éxito.
- He instalado ODAC112021Xcopy_x64.zip y poner la carpeta de instalación y la carpeta bin en la variable PATH ventanas. Sin éxito.
- 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 usandoSystem.Data.OracleClient
, debería funcionar, b pero como lo usa, todavía falló. - Busqué en Google y stackoverflew pero no encontré nada más que las publicaciones a las que ya me he referido.
- He elaborado cuidadosamente esta pregunta con la esperanza de obtener algún consejo profundo de un usuario SO ilustrado.
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.
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
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. –
Hola b_levitt. Intenté eso, desafortunadamente todavía recibo el mismo mensaje de error (vea nuevo # 9 en mi pregunta actualizada) – chiccodoro