Jak rozumiem, problem polegał na tym, że chociaż Oracle.DataAccess.dll znajdował się w tym samym katalogu co aplikacja, nie mógł znaleźć swoich ziomków niższego poziomu (oci, et al), stąd błąd zgodności.
Okazuje się, że jeśli chcesz, aby aplikacja działała z wdrożeniem ODAC 11 xcopy, niezależnie od tego, co jeszcze użytkownik zainstalował na swoim komputerze, musisz zrobić 2 rzeczy:
- Ustaw zmienną środowiskową PATH dla procesu. (Już to robiłem.)
-
Ustaw zmienną środowiskową ORACLE_HOME dla procesu. (Nie robiłem tego.)
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);
EDYTUJ: Należy również zauważyć, że Oracle zgłosi ten błąd nie tylko w przypadku problemów środowiskowych, ale także w przypadku braku jednego z plików na komputerze docelowym. Dostałem ten sam błąd na innych maszynach, pomimo ustawień środowiska, ponieważ miałem ustawione w Subversion ignorowanie katalogów o nazwie „bin”, więc biblioteka OraOps DLL nie była kopiowana do klienta.