【问题标题】:Oracle.DataAccess 2.112.1.0 reference issues in .NET4.0 VS2010.NET4.0 VS2010 中的Oracle.DataAccess 2.112.1.0 参考问题
【发布时间】:2013-01-14 11:53:02
【问题描述】:

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

【问题讨论】:

  • 尝试先删除引用,然后将其添加回来(使用浏览)。
  • 尝试了很多,但项目文件条目仍然没有改变。我尝试使用记事本编辑项目文件。但仍然收到同样的错误。
  • 可以在属性中找到dll的位置和版本(在参考中,右键单击Oracle.DataAccess并选择属性)
  • 我知道位置和版本,我确信当我右键单击引用时,它会显示一个不同的路径,该路径是在我的解决方案的项目文件 (.csproj) 的引用部分中输入的。我的问题是这是什么原因?

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


【解决方案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. Un-GAC 您的应用自动引用的 2.112.X.0。
  2. 将特定于版本的 COM DLL 复制到不同的目录(如 \LIB)
  3. 在构建时将它们复制到构建中

如果这一切都失败了,我建议完全卸载 Oracle ODP.NET,手动删除 Oracle 目录,然后在重新启动后,直接从 MSI 安装旧的 DLL。 Oracle 似乎已将驱动程序的全部历史在线存储在 Oracle's website

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多