.NET4.0 VS2010中的Oracle.DataAccess 2.112.1.0参考问题

时间:2013-01-30 15:40:01

标签: visual-studio-2010 oracle .net-4.0 odp.net data-access

我的项目中引用了Oracle.DataAccess 2.112.1.0版本。每当我运行项目时,我都会收到错误无法加载程序集。我检查了.csproj文件中为引用的dll创建的条目,发现引用的dll是Oracle.DataAccess 2.111.7.0。我很确定引用的dll是Oracle.DataAccess2.112.1.0但不确定为什么项目文件中的条目不同。任何对此的指示都会有所帮助,因为这个问题长期困扰我。

1 个答案:

答案 0 :(得分:1)

当客户端在其引用中使用2.112.1.0时,我发现了同样的问题,但它仍然引用了本地2.112.3.0的计算机。

原因是,当安装在GAC中时,它会插入一个策略文件 - 一个GAC级别配置条目,以将您的DLL重定向到其较新版本。即使您将文件放在同一个目录中,.NET 2+也会在允许您的应用程序解析程序集本身之前检查GAC是否有任何策略。

我尝试过的是App / Web.config文件中的手动重定向,但我发现这对我不起作用,详见Redirecting Assembly Versions

完成此操作后,您可能会遇到此问题:

  • BadImageFormatException - Image is not of correct format(或类似的东西)

和/或

  • Version mismatch - The major/minor version does not match(或类似的东西)

这些错误表明虽然您的旧程序集现在正在使用中,但它不会引用它引用的 COM 程序集。我的调查发现Oracle ODP.NET程序集存储了其硬编码的COM DLL版本。

为我做的唯一解决方案是

  1. 取消GAC您的应用自动引用的2.112.X.0。
  2. 将特定于版本的COM DLL复制到其他目录(如\ LIB)
  3. 在构建时将它们复制到构建中
  4. 如果全部失败,我建议完全卸载Oracle ODP.NET,手动删除Oracle目录,然后重启后直接从MSI安装旧的DLL。 Oracle似乎已经在Oracle's website上存储了驱动程序的整个历史记录。

    祝你好运!