9

System.Data.OracleClientWin7 x64 ワークステーションで使用する .NET アプリケーションを実行しようとしています。ワークステーションには 32 ビットの Oracle クライアントがインストールされているため、次のエラー メッセージが表示されます。

Oracle クライアント ライブラリをロードしようとすると、BadImageFormatException がスローされました。この問題は、32 ビットの Oracle クライアント コンポーネントがインストールされている状態で 64 ビット モードで実行している場合に発生します。

だから、これは私の試行錯誤の長い旅です:

  1. Oracle クライアントwin64_11gR2_clientをインストールしようとしました。しかし、セットアップ プロセス中にコメントなしでクラッシュします。
  2. 別の SO スレッドからの回答に従い、instantclient-basic-windows.x64-11.2.0.2.0を試して抽出し、バイナリを含むフォルダーを Windows PATH 変数に入れました。ただし、(再起動後でも)同じエラーメッセージが表示されます。
  3. この回答の「別の方法」に従い、ファイルoci.dll、orannzsbb11.dll、およびoraociei11.dllを Web サイト プロジェクトの bin/ フォルダーにコピーしました。それでも同じエラーメッセージです。
  4. インスタントクライアントからすべてのファイルをそのディレクトリにコピーして再試行しましたが、成功しませんでした。
  5. ODAC112021Xcopy_x64.zipをインストールし、インストール フォルダーと bin フォルダーを Windows PATH 変数に入れました。失敗。
  6. 私はこの答えに希望を置き、レジストリのDllPathを確認しました (これは実際には ODP.NET ではなく ODP.NET に関連していると想定されてSystem.Data.OracleClientいます)。DllPath が ODAC の正しい x64 インストールを指していることがわかりました。を使用System.Data.OracleClientすると動作するはずですが、それを使用しているため、まだ失敗しています。
  7. 私はグーグルでスタックオーバーフローしましたが、すでに参照した投稿以外に何も見つかりませんでした。
  8. 賢明な SO ユーザーから洞察に満ちたアドバイスを得ることを期待して、この SO の質問を慎重に作成しました。
  9. 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 ビットが必要です。

4

2 に答える 2

4

#5 は機能するはずですが、ORACLE_HOME 環境変数も設定する必要があります。最近、あなたが使用しているxcopyインストールを含め、これを何度も行いました。xcopy のインストールに関する私の経験を確認し、どのような種類の追加エラーが発生するかをお知らせください。

私の場合、asp.net用にセットアップしていましたが、winformsはさらに簡単です。cmd ウィンドウを開き、「set」コマンドを使用して PATH と ORACLE_HOME の両方の環境変数を設定し、同じ cmd ウィンドウからアプリを実行できます。バグを解決したら、Environment.SetEnvironmentVariable を使用してコード内でこれらを設定できます。

記録として、Web サービスを介してすべてのビジネス ロジックを処理することで、Oracle クライアントをクライアント マシンにインストールすることは避けています。そうすれば、Web サーバー上の Oracle コンポーネントのみが必要になります。

于 2011-07-26T14:38:10.687 に答える
1

私はあなたと同じ問題を抱えていました。私の回答のほとんどは、Oracle フォーラムとここの stackoverflow で見つけました。参照用のリンクを投稿することはできませんが、試してみることができます。

  1. また、OraOps11w.dll を他の Oracle dll ファイルとともに bin ディレクトリに含めます。
  2. プロジェクトのプロパティ | 参照パスに移動し、プロジェクトのフレームワーク バージョンに応じて、C:\Windows\Microsoft.NET\Framework64\v2.0.50727 または C:\Windows\Microsoft.NET\Framework64\v4.0.30319 を参照パスに追加します。使っている。
  3. **よく覚えていないあいまいな部分: System.Data.OracleClient の現在の参照を削除し、C:\Windows\Microsoft.NET\Framework64\v2.0.50727 または C:\Windows\Microsoft.NET から新しい参照を追加します。プロジェクトが使用しているフレームワークのバージョンに応じて、\Framework64\v4.0.30319 を参照パスに追加します。

例外がなくなるかどうかを確認します。

参考までに、Microsoft は近い将来、Oracle データ プロバイダー (ADO.NET 内) のサポートを終了します。現在、.NET 4 で動作しますが、ネイティブの Oracle ドライバーのテストを開始することをお勧めします。

于 2011-08-31T02:01:36.427 に答える