System.Data.OracleClient
Win7 x64 ワークステーションで使用する .NET アプリケーションを実行しようとしています。ワークステーションには 32 ビットの Oracle クライアントがインストールされているため、次のエラー メッセージが表示されます。
Oracle クライアント ライブラリをロードしようとすると、BadImageFormatException がスローされました。この問題は、32 ビットの Oracle クライアント コンポーネントがインストールされている状態で 64 ビット モードで実行している場合に発生します。
だから、これは私の試行錯誤の長い旅です:
- Oracle クライアントwin64_11gR2_clientをインストールしようとしました。しかし、セットアップ プロセス中にコメントなしでクラッシュします。
- 別の SO スレッドからの回答に従い、instantclient-basic-windows.x64-11.2.0.2.0を試して抽出し、バイナリを含むフォルダーを Windows PATH 変数に入れました。ただし、(再起動後でも)同じエラーメッセージが表示されます。
- この回答の「別の方法」に従い、ファイルoci.dll、orannzsbb11.dll、およびoraociei11.dllを Web サイト プロジェクトの bin/ フォルダーにコピーしました。それでも同じエラーメッセージです。
- インスタントクライアントからすべてのファイルをそのディレクトリにコピーして再試行しましたが、成功しませんでした。
- ODAC112021Xcopy_x64.zipをインストールし、インストール フォルダーと bin フォルダーを Windows PATH 変数に入れました。失敗。
- 私はこの答えに希望を置き、レジストリのDllPathを確認しました (これは実際には ODP.NET ではなく ODP.NET に関連していると想定されて
System.Data.OracleClient
います)。DllPath が ODAC の正しい x64 インストールを指していることがわかりました。を使用System.Data.OracleClient
すると動作するはずですが、それを使用しているため、まだ失敗しています。 - 私はグーグルでスタックオーバーフローしましたが、すでに参照した投稿以外に何も見つかりませんでした。
- 賢明な SO ユーザーから洞察に満ちたアドバイスを得ることを期待して、この SO の質問を慎重に作成しました。
b_levitt から最初の回答を得た後、次の行を Global.asax at に追加してみました
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 は、ODAC 64 ビット xcopy バージョンをインストールした場所です。どちらも成功しません。
関連して、.NET アプリを強制的に 32 ビット モードにしようとしても成功しませんでしたが、それは別のことです。将来を見据えたソリューション、つまり 64 ビットが必要です。