我的项目中引用了 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 版本硬编码存储在其中。
对我来说唯一的解决方案是
- 非 GAC 您的应用自动引用的 2.112.X.0。
- 将版本特定的 COM DLL 复制到不同的目录(如\LIB)
- 在构建时将它们复制到构建中
如果这一切都失败了,我建议完全卸载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/