我的项目中引用了 Oracle.DataAccess 2.112.1.0 版本。每当我运行项目时,我都会收到错误无法加载程序集。我检查了 .csproj 文件中为引用的 dll 创建的条目,发现引用的 dll 是 Oracle.DataAccess 2.111.7.0。我很确定引用的 dll 是 Oracle.DataAccess2.112.1.0 但不确定为什么项目文件中的条目不同。对此的任何指示都会有所帮助,因为这个问题已经困扰了我很长时间。
问问题
6023 次
1 回答
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 版本。
对我来说唯一的解决方案是
- Un-GAC 应用程序自动引用的 2.112.X.0。
- 将特定于版本的 COM DLL 复制到不同的目录(如 \LIB)
- 在构建时将它们复制到构建中
如果这一切都失败了,我建议完全卸载 Oracle ODP.NET,手动删除 Oracle 目录,然后在重新启动后,直接从 MSI 安装旧的 DLL。甲骨文似乎已经在甲骨文的网站上在线存储了驱动程序的全部历史。
祝你好运!
于 2013-02-06T17:25:01.643 回答