Oracle
 sql >> Database >  >> RDS >> Oracle

Perché la distribuzione di ODP.NET 11 xcopy non funziona su una macchina con Oracle DB 10 installato?

Quindi, a quanto ho capito, il problema era che mentre Oracle.DataAccess.dll si trovava nella stessa directory dell'app, non riusciva a trovare i suoi homies di livello inferiore (oci, et al), da qui l'errore di compatibilità.

Si scopre che se vuoi che un'applicazione funzioni con la distribuzione di ODAC 11 xcopy indipendentemente da cos'altro l'utente potrebbe aver installato sul suo computer, devi fare 2 cose:

  1. Imposta la variabile di ambiente PATH per il processo. (Lo stavo già facendo.)
  2. Imposta la variabile di ambiente ORACLE_HOME per il processo. (Non lo stavo facendo.)

    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);
    

MODIFICA: È anche importante notare che Oracle genererà questo errore non solo per problemi ambientali, ma anche se uno dei file manca sul computer di destinazione. Ho ricevuto lo stesso errore su altre macchine nonostante le impostazioni dell'ambiente perché avevo Subversion impostato per ignorare le directory chiamate "bin", quindi la DLL OraOps non veniva copiata sul client.