Så som jeg forstår det, var problemet, at mens Oracle.DataAccess.dll var i den samme mappe som appen, kunne den ikke finde sine homies på lavere niveau (oci, et al), og derfor kompatibilitetsfejlen.
Det viser sig, at hvis du vil have et program til at fungere med ODAC 11 xcopy-implementering, uanset hvad brugeren ellers måtte have installeret på sin maskine, skal du gøre 2 ting:
- Indstil PATH-miljøvariablen for processen. (Jeg gjorde allerede dette.)
-
Indstil ORACLE_HOME miljøvariablen for processen. (Jeg gjorde ikke dette.)
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);
EDIT: Det er også vigtigt at bemærke, at Oracle vil kaste denne fejl ikke kun for miljøproblemer, men også hvis en af filerne mangler på målmaskinen. Jeg fik den samme fejl på andre maskiner på trods af miljøindstillingerne, fordi jeg havde Subversion indstillet til at ignorere mapper kaldet "bin", så OraOps DLL blev ikke kopieret til klienten.