5

で困ってOracle.DataAccessWPFます。Oracle.DataAccess v4.0 問題なく使えました。しかし、現在はバージョン 4.112 に更新されておりWPF、デザイナーでこのバージョンへの参照を追加すると、ロードできませんでした。次のエラーが表示されます。

System.BadImageFormatException
Could not load file or assembly 'Oracle.DataAccess, 
Version=4.112.3.0, Culture=neutral, 
PublicKeyToken=89b483f429c47342' or one of its dependencies. 
An attempt was made to load a program with an incorrect format.

プログラムは問題なく実行されることに注意してください。プロパティの「ターゲットCPU」が原因である可能性があることを読みました。x64 と x86 の両方をテストしましたが、何も変わりません。どうすればこの問題を解決できますか。前もって感謝します

4

4 に答える 4

6

問題は、私のOracle.DataAccess.dllファイルにありました。ODAC 11 XCopyをダウンロードし、Oracle.DataAccess.dll を \odp.net4\odp.net\bin\4 から OracleClient の \odp.net\bin\4 フォルダーにコピーして、dll を置き換えました。今では魅力のように機能します。

それが他の誰かに役立つことを願っています

于 2012-09-24T05:32:47.697 に答える
3

依存関係DLLをOracle.DataAccesに配置することで解決した同じ問題に直面しました。このリンクを確認してくださいOracle クライアント 11 で .NET アプリケーションを展開するために必要な最小限のセットアップは何ですか?

それが役立つことを願っています。

于 2012-09-22T07:00:31.187 に答える
0

もう 1 つの解決策は、 64 ビット Oracle Data Access Components (ODAC) Downloadsから 'ODAC112030Xcopy.zip' 内の install.bat ファイルをダウンロードして実行することです。

于 2014-09-17T13:45:45.773 に答える
0

私はこの問題に何度も対処してきました。以下は、私がアプリをデプロイするために日常的に使用している PowerShell の一部です。

$target = "\\SERVER\c$\PROJECT"
$oracleBin = "C:\oracle\product\11.2.0\client_1\BIN\"
$projectHome = "C:\Users\USER\Code\CSharp\PROJECT\bin\Release\"
$files = @(
($oracleBin + "oci.dll"),
($oracleBin + "orannzsbb11.dll"),
($oracleBin + "oraocci11.dll"),
($oracleBin + "OraOps11w.dll"),
($projectHome + "EntityFramework.dll"),
($projectHome + "EntityFramework.xml"),
($projectHome + "Oracle.DataAccess.dll"),
($projectHome + "PROJECT.exe")
#,($projectHome + "PROJECT.exe.config")
)
foreach($f in $files) {
    copy-item $f $target
}

この問題の解決に苦労している人のために、2 つのメモを追加できます。

  1. Visual Studio 内から Oracle.DataAccess.dll を参照している場所に基づいて、正しい Oracle ホーム (つまり、client_1\bin の場所) を見つけることができます。複数の Oracle ホームがあるため、これは何度か解決しなければならなかった問題です。
  2. 上記はOracle 11gで機能します。Oracle 12c を使用している場合は、同様のプロセスが機能すると思いますが、一部のファイル名が *11.dll から *12.dll に変更されています。

ここに画像の説明を入力

于 2014-03-18T16:24:34.617 に答える