Så som jag förstår det var problemet att medan Oracle.DataAccess.dll fanns i samma katalog som appen, kunde den inte hitta sina homies på lägre nivå (oci, et al), därav kompatibilitetsfelet.
Det visar sig att om du vill att ett program ska fungera med ODAC 11 xcopy-distribution oavsett vad användaren kan ha installerat på sin dator, måste du göra två saker:
- Ställ in PATH-miljövariabeln för processen. (Jag gjorde redan det här.)
-
Ställ in miljövariabeln ORACLE_HOME för processen. (Jag gjorde inte det här.)
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 är också viktigt att notera att Oracle kommer att skicka detta fel inte bara för miljöfrågor, utan också om en av filerna saknas på måldatorn. Jag fick samma fel på andra maskiner trots miljöinställningarna eftersom jag hade Subversion inställd på att ignorera kataloger som heter "bin", så OraOps DLL kopierades inte till klienten.