Saltar al contenido

BadImageFormatException. Esto ocurrirá cuando se ejecute en modo de 64 bits con los componentes del cliente Oracle de 32 bits instalados

La guía o código que verás en este post es la resolución más rápida y válida que hallamos a esta duda o problema.

Solución:

Una solución es instalar Clientes Oracle x86 (32 bits) y x64 en su máquina, luego no importa en qué arquitectura se esté ejecutando su aplicación.

Aquí una instrucción para instalar el cliente Oracle x86 y x64 en una máquina:

Supuestos: Oracle Home se llama OraClient11g_home1, La versión del cliente es 11gR2

  • Opcionalmente, elimine cualquier cliente de Oracle instalado (consulte ¿Cómo desinstalar / eliminar por completo Oracle 11g (cliente)? ​​Si tiene problemas)

  • Descargue e instale Oracle x86 Client, por ejemplo en C:Oracle11.2Client_x86

  • Descargue e instale Oracle x64 Client en una carpeta diferente, por ejemplo para C:Oracle11.2Client_x64

  • Abra la herramienta de línea de comandos, vaya a la carpeta% WINDIR% System32, normalmente C:WindowsSystem32 y crea un enlace simbólico ora112 a la carpeta C:Oracle11.2Client_x64 (ver la sección de comandos a continuación)

  • Cambie a la carpeta% WINDIR% SysWOW64, normalmente C:WindowsSysWOW64 y crea un enlace simbólico ora112 a la carpeta C:Oracle11.2Client_x86, (vea abajo)

  • Modificar el PATH variable de entorno, reemplace todas las entradas como C:Oracle11.2Client_x86 y C:Oracle11.2Client_x64 por C:WindowsSystem32ora112, respectivas sus bin subcarpeta. Nota: C:WindowsSysWOW64ora112 no debe estar en el entorno PATH.

  • Si es necesario, configure su ORACLE_HOME variable de entorno a C:WindowsSystem32ora112

  • Abra su Editor de registro. Establecer valor de registro HKLMSoftwareORACLEKEY_OraClient11g_home1ORACLE_HOME para C:WindowsSystem32ora112

  • Establecer valor de registro HKLMSoftwareWow6432NodeORACLEKEY_OraClient11g_home1ORACLE_HOME para C:WindowsSystem32ora112 (no C:WindowsSysWOW64ora112)

  • ¡Estás listo! Ahora puede usar el cliente Oracle x86 y x64 sin problemas juntos, es decir, una aplicación x86 cargará las bibliotecas x86, una aplicación x64 carga las bibliotecas x64 sin ninguna modificación adicional en su sistema.

  • Probablemente sea una buena opción configurar su TNS_ADMIN variable de entorno (resp. TNS_ADMIN entradas en el Registro) a una ubicación común, por ejemplo TNS_ADMIN=C:OracleCommonnetwork.

Comandos para crear enlaces simbólicos:

cd C:WindowsSystem32
mklink /d ora112 C:Oracle11.2Client_x64
cd C:WindowsSysWOW64
mklink /d ora112 C:Oracle11.2Client_x86

Notas:

Ambos enlaces simbólicos deben tener el mismo nombre, p. Ej. ora112.

A pesar de su carpeta de nombres C:WindowsSystem32 contiene las bibliotecas x64, mientras que C:WindowsSysWOW64 contiene las bibliotecas x86 (32 bits). No se confunda.

En mi situación, Oracle 11.2 Cliente de 32 bitsera instalado en mi Windows de 64 bits 2008 R2 OS.

Mi solución: En la Configuración avanzada de Grupo de aplicaciones asignado a mi ASP.NET aplicación, configuro Habilitar aplicaciones de 32 bits para Cierto.

Consulte a continuación la versión independiente .ashx script de prueba que utilicé para probar la capacidad de conectarme a Oracle. Antes de realizar el cambio del grupo de aplicaciones, su respuesta fue:

[Running as 64-bit] Connection failed.

… y después del cambio del grupo de aplicaciones:

[Running as 32-bit] Connection succeeded.

TestOracle.ashx – Script para probar una conexión de Oracle a través de System.Data.OracleClient:

Usar: Cambie el usuario, la contraseña y las variables del sistema principal según corresponda.

Tenga en cuenta que esta secuencia de comandos se puede utilizar de forma independiente sin alterar el archivo de proyecto de la aplicación web ASP.NET. Simplemente colóquelo en la carpeta de su aplicación.

<%@ WebHandler Language="C#" Class="Handler1" %>
<%@ Assembly Name="System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" %>

using System;
using System.Data.OracleClient;
using System.Web;

public class Handler1 : IHttpHandler

    private static readonly string m_User = "USER";
    private static readonly string m_Password = "PASSWORD";
    private static readonly string m_Host = "HOST";

    public void ProcessRequest(HttpContext context)
    
        context.Response.ContentType = "text/plain";

        string result = TestOracleConnection();
        context.Response.Write(result);
    

    public bool IsReusable
    
        get  return false; 
    

    private string TestOracleConnection()
    
        string result = IntPtr.Size == 8 ?
            "[Running as 64-bit]" : "[Running as 32-bit]";

        try
        
            string connString = String.Format(
              "Data Source=0;Password=1;User ID=2;",
              m_Host, m_User, m_Password);

            OracleConnection oradb = new OracleConnection();
            oradb.ConnectionString = connString;
            oradb.Open();
            oradb.Close();
            result += " Connection succeeded.";
        
        catch
        
            result += " Connection failed.";
        

        return result;
    

Tuve el mismo problema en una PC con Windows 10. Copié el proyecto de mi computadora anterior a la nueva, ambas de 64 bits, e instalé Oracle Client de 64 bits en la nueva máquina. Recibí el mismo mensaje de error, pero después de probar muchas soluciones sin ningún efecto, lo que realmente funcionó para mí fue esto: En su Visual Studio (el mío es 2017) vaya a Herramientas> Opciones> Proyectos y soluciones> Proyectos web

En esa página, marque la opción que dice: Use la versión de 64 bits de IIS Express para sitios web y proyectos

Si entiendes que te ha sido de utilidad este post, nos gustaría que lo compartas con más seniors de esta forma nos ayudas a dar difusión a nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *