5

我在使用Oracle.DataAccessin时遇到问题WPF。我使用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

我已经处理过这个问题太多次了。下面是一些我经常用来部署应用程序的 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
}

我可以为努力解决此问题的人添加两个注释:

  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 回答
0

另一种解决方案是从64-bit Oracle Data Access Components (ODAC) Downloads下载并执行“ODAC112030Xcopy.zip”中的 install.bat 文件。

于 2014-09-17T13:45:45.773 回答