Vì vậy, theo tôi hiểu, vấn đề là trong khi Oracle.DataAccess.dll nằm trong cùng thư mục với ứng dụng, nó không thể tìm thấy các homies cấp thấp hơn của nó (oci, et al), do đó lỗi tương thích.
Hóa ra là nếu bạn muốn một ứng dụng hoạt động với việc triển khai ODAC 11 xcopy bất kể người dùng có thể đã cài đặt những gì khác trên máy của họ, bạn cần thực hiện 2 điều:
- Đặt biến môi trường PATH cho quy trình. (Tôi đã làm việc này.)
-
Đặt biến môi trường ORACLE_HOME cho quy trình. (Tôi đã không làm điều này.)
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);
CHỈNH SỬA: Điều quan trọng cần lưu ý là Oracle sẽ gây ra lỗi này không chỉ cho các vấn đề môi trường mà còn nếu một trong các tệp bị thiếu trên máy mục tiêu. Tôi gặp lỗi này tương tự trên các máy khác mặc dù cài đặt Môi trường vì tôi đã đặt Subversion để bỏ qua các thư mục được gọi là "bin", vì vậy OraOps DLL không được sao chép vào máy khách.