Tôi đang cố chạy ứng dụng .NET sử dụng System.Data.OracleClient
trên máy trạm Win7 x64. Máy trạm có một máy khách Oracle 32 bit được cài đặt, dẫn đến thông báo lỗi sau:Cách yêu cầu System.Data.OracleClient sử dụng Trình điều khiển Oracle 64 bit
Cố gắng tải các thư viện máy khách Oracle đã ném BadImageFormatException. Vấn đề này sẽ xảy ra khi chạy ở chế độ 64 bit với các thành phần máy khách Oracle 32 bit được cài đặt.
Vì vậy, đây là cuộc hành trình dài của tôi cố gắng và thất bại:
- Tôi cố gắng để cài đặt Oracle client win64_11gR2_client. Nhưng trong quá trình cài đặt, nó bị treo mà không có bất kỳ bình luận nào.
- Tôi đã theo dõi answer from a different SO thread, đã thử và trích xuất instantclient-basic-windows.x64-11.2.0.2.0 và đặt thư mục chứa các tệp nhị phân trong biến PATH của cửa sổ. Tôi vẫn nhận được thông báo lỗi tương tự mặc dù (ngay cả sau khi khởi động lại).
- Tôi đi theo "con đường thay thế" từ this answer và sao chép các tập tin oci.dll, orannzsbb11.dll, và oraociei11.dll vào bin/thư mục của dự án trang web của tôi. Vẫn là thông báo lỗi tương tự.
- Tôi đã thử và sao chép tất cả tệp từ ứng dụng khách tức thì vào thư mục đó và thử lại, mà không thành công.
- Tôi đã cài đặt ODAC112021Xcopy_x64.zip và đặt thư mục cài đặt và thư mục bin vào cửa sổ biến PATH. Không thành công.
- tôi đặt hy vọng của tôi về this answer và xem xét các DllPath trong registry (mà thực sự là phải liên quan đến ODP.NET như trái ngược với
System.Data.OracleClient
) và thấy rằng điểm DllPath để quá trình cài đặt x64 đúng ODAC, vì vậy, nếu ứng dụng của tôi đã không sử dụngSystem.Data.OracleClient
, nó sẽ hoạt động, nhưng vì nó sử dụng nó, nó vẫn không thành công. - Tôi googled và stackoverflew nhưng không tìm thấy bất cứ điều gì khác mà các bài viết tôi đã đề cập đến.
- Tôi đã cẩn thận tạo câu hỏi SO này với hy vọng nhận được bất kỳ lời khuyên sâu sắc nào từ người dùng SO khai ngộ.
Sau khi nhận được câu trả lời đầu tiên từ b_levitt, tôi đã cố gắng và thêm các dòng sau vào Global.asax tại
Application_Start
:Environment.SetEnvironmentVariable("ORACLE_HOME", @"C:\OracleProducts\Odac-11.2.0.2.1-x64"); Environment.SetEnvironmentVariable("PATH", @"C:\OracleProducts\Odac-11.2.0.2.1-x64;C:\OracleProducts\Odac-11.2.0.2.1-x64\bin");
C: \ OracleProducts \ Odac-11.2.0.2.1-x64 là nơi Tôi đã cài đặt phiên bản xcopy ODAC 64 bit. Không thành công.
Trên một lưu ý liên quan, tôi thậm chí đã cố gắng để force my .NET app into 32bit mode without success, nhưng đó là một điều khác nhau. Tôi cần một giải pháp hướng tới tương lai, có nghĩa là 64bit.
Điều này có vẻ đầy hứa hẹn. Sẽ có một thử khi trở lại làm việc. Trong thực tế, tôi có hai trường hợp của vấn đề này, một là một ASP.NET và một ứng dụng máy tính để bàn. – chiccodoro
bạn sẽ không gặp vấn đề gì cả. Tôi đã có may mắn với các chức năng SetEnvironmentVariable cho ASP.net, Winforms, và thậm chí cả dịch vụ. Điều này tất nhiên chỉ cần thiết nếu bạn không muốn đặt các biến này ở mức hệ thống. Nếu đây là máy khách oracle duy nhất trên máy, tôi sẽ chỉ thiết lập các biến môi trường hệ thống ORACLE_HOME và PATH. –
Xin chào b_levitt. Tôi đã thử điều đó, rất tiếc là tôi vẫn nhận được thông báo lỗi tương tự (xem # 9 mới trong câu hỏi được cập nhật của tôi) – chiccodoro