【问题标题】:Different versions of ODAC causing error in C# application (local Vs Server)不同版本的 ODAC 在 C# 应用程序中导致错误(本地 Vs 服务器)
【发布时间】:2018-12-13 07:54:14
【问题描述】:

我已经使用 C# 构建了一个应用程序。我参考了 ODAC 版本 4.121.2.0。 当我在服务器上部署我的应用程序时,应用程序失败并出现错误:

未处理的异常:System.BadImageFormatException:无法加载文件或资产 mbly 'Oracle.DataAccess,版本=4.121.2.0,文化=中性,PublicKeyToken=89b4 83f429c47342'。该程序集是为不同的处理器编译的。

服务器只安装了 4.121.1.0。

我需要做什么才能使应用程序正常工作?我尝试过的事情:

 1. In the .csproj <SpecificVersion>False</SpecificVersion>

 <Private>False</Private>

 2. I tried copying over the ODAC version (4.121.2.0) in the bin solution directory(of the server), it wouldn't work.
 3. I tried removing all ODAC dlls in folder, so that it can find out older version and use that for functionality.

我不想在本地安装旧版本,然后 - 我过去曾尝试过此操作,但最终卸载了所有版本。

可能的重复: Having two ODP.NET (ODAC) versions in the same server

How do I get an older version of OracleClient to work locally with .NET? oracleclient-to-work-locally-with-net

但是这些链接并没有为我的问题提供解决方案。

【问题讨论】:

  • 差别不大。您的代码在构建时需要一个较新的程序集,但是却发现了一个 较旧的 程序集。部署正确的文件
  • BTW BadImageFormatException 通常在 32 位和 64 位程序集混合时抛出。这是一个巨大的差异。部署 正确 程序集。如果您无法控制使用哪个版本的 ODAC,请找出服务器的版本并使用该版本重新编译您的代码
  • 我已经从问题中删除了“稍微”(对不起,我太累了)。我做了 2 处更改 - 参考路径从我的 Oracle Home 更改为使用 GAC。 - 修改 Proj 以使用 64 位 dll。经过上述2次更改后它起作用了。谢谢

标签: c# odp.net odac


【解决方案1】:

我认为您遇到的错误与依赖版本问题无关。当入口点(即exe 文件)和其中一个依赖项之间存在32Bit/64Bit 不兼容时,通常会抛出BadImageFormatException

在编译项目时尝试使用目标平台(Any CPU/x86/x64Prefer 32-Bit 项目属性)。

希望对你有帮助!

【讨论】:

  • 版本差异本身会出现异常。看起来 OP 部署了错误的版本 bitness
  • 我做了 2 处更改 - 引用路径从我的 Oracle Home 更改为使用 GAC。 - 修改 Proj 以使用 64 位 dll。经过上述2次更改后它起作用了。感谢你们…… Itay Podhajcer 和 Panagiotis Kanavos
  • 忘了提及 - 在服务器上,Oracle Home 是 V 4.121.1.0,但 GAC 中存在 64 位 dll。如果我需要提及其他任何内容,请告诉我(如果我的回答引发了任何问题)
猜你喜欢
  • 1970-01-01
  • 2017-09-10
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 2018-03-01
  • 1970-01-01
  • 2014-03-08
相关资源
最近更新 更多