Така че, както разбирам, проблемът беше, че докато Oracle.DataAccess.dll беше в същата директория като приложението, то не можеше да намери своите приятели от по-ниско ниво (oci, et al), оттук и грешката в съвместимостта.
Оказва се, че ако искате дадено приложение да работи с внедряване на ODAC 11 xcopy, независимо какво друго потребителят може да е инсталирал на своята машина, трябва да направите 2 неща:
- Задайте променливата на средата PATH за процеса. (Вече правех това.)
-
Задайте променливата на средата ORACLE_HOME за процеса. (Не правех това.)
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);
РЕДАКТИРАНЕ: Също така е важно да се отбележи, че Oracle ще изведе тази грешка не само за проблеми с околната среда, но и ако един от файловете липсва на целевата машина. Получих същата грешка на други машини въпреки настройките на околната среда, тъй като бях настроил Subversion да игнорира директории, наречени „bin“, така че OraOps DLL не се копира на клиента.