sql >> Base de Datos >  >> RDS >> Oracle

¿Por qué la implementación xcopy de ODP.NET 11 no funciona en una máquina con Oracle DB 10 instalado?

Entonces, según tengo entendido, el problema era que mientras Oracle.DataAccess.dll estaba en el mismo directorio que la aplicación, no podía encontrar sus homies de nivel inferior (oci, et al), de ahí el error de compatibilidad.

Resulta que si desea que una aplicación funcione con la implementación xcopy de ODAC 11 independientemente de qué más haya instalado el usuario en su máquina, debe hacer 2 cosas:

  1. Establezca la variable de entorno PATH para el proceso. (Ya estaba haciendo esto).
  2. Configure la variable de entorno ORACLE_HOME para el proceso. (Yo no estaba haciendo esto.)

    Environment.SetEnvironmentVariable("PATH", Environment.CurrentDirectory + "\\oracle\\11.1\\odac;" + Environment.CurrentDirectory + "\\oracle\\11.1\\odac\\bin;", EnvironmentVariableTarget.Process);
    Environment.SetEnvironmentVariable("ORACLE_HOME", Environment.CurrentDirectory + "\\oracle\\11.1\\odac", EnvironmentVariableTarget.Process);
    

EDITAR: También es importante tener en cuenta que Oracle arrojará este error no solo por problemas ambientales, sino también si falta uno de los archivos en la máquina de destino. Recibí este mismo error en otras máquinas a pesar de la configuración del entorno porque tenía configurado Subversion para ignorar los directorios llamados "bin", por lo que la DLL de OraOps no se estaba copiando en el cliente.