visual-studio-2010 - .NET4.0 VS2010 中的 Oracle.DataAccess 2.112.1.0 引用问题

标签 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,但不确定为什么项目文件中的条目不同。任何指向此问题的指示都会有所帮助,因为这个问题已经困扰我很长时间了。

最佳答案

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

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

我尝试过在您的 App/Web.config 文件中进行手动重定向,但我发现这对我不起作用,这在Redirecting Assembly Versions下有详细说明。 。

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

  • BadImageFormatException - 图像格式不正确(或类似的内容)

和/或

  • 版本不匹配 - 主/次版本不匹配(或类似内容)

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

对我来说唯一的解决方案是

  1. 非 GAC 您的应用自动引用的 2.112.X.0。
  2. 将版本特定的 COM DLL 复制到不同的目录(如\LIB)
  3. 在构建时将它们复制到构建中

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

祝你好运!

关于visual-studio-2010 - .NET4.0 VS2010 中的 Oracle.DataAccess 2.112.1.0 引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14607838/

相关文章:

c# - 无法将 Excel 值的类型 'double' 转换为 'string'

java - Flyway 中的 DDL + DML(推荐方法)

oracle - Pgx 内存不足错误 : maximum off-heap size is configured to not exceed 8, 192 MB

c# - 在 WPF 中创建大量用户控件

asp.net - 如何判断我的服务器上是否安装了 asp.net 4.0?

c# - DataGridView 在通过单元测试调用时不接受 DataSource

.net - System.ServiceModel.Web.dll 在哪里?

python - .py 文件可以在 Visual Studio 2010 中调试吗?

c# - 我可以建议 "Generate method stub"在 Visual C# 中存储新生成的代码的位置吗?

database - ROWID (oracle) - 它有什么用吗?