我创建了这个主题,因为即使有很多类似的线程我也找不到答案。
最近,许多用户报告在Visual Studio中创建的工具停止工作。这是一个用C#编写的WPF应用程序,其目的是获取Excel电子表格并将其导出到Oracle数据库以进行进一步计算。
当应用程序尝试创建一个OracleBulkCopy
库的成员Oracle.DataAccess
时,应用程序崩溃(它作为参考添加到项目中)。该项目作为安装包在用户之间分发,其想法是他们不需要安装任何其他东西。
目前我正在3台机器上调查此问题:
仅适用于已重新安装Windows 7 64位和Oracle Client 11g(Oracle.DataAccess版本2.112.2.0)的3号机器。另外两个也在Windows 7 64位上运行,我们对各种Oracle库进行了测试。机器号1有点乱,因为我删除或重新安装了许多版本的DataAccess,而在GAC中它们都是可见的。我尝试以与机器3相同的方式设置2号机器(虚拟机,也是新的Windows 7),但应用程序仍然崩溃。
在浏览了一些论坛和StackOverflow问题之后,这是错误消息和我的发现。
InnerException
的信息,我抓住了尝试...抓住。描述如下:内部异常
单步执行:单步执行属性System.Exception.get_InnerException'。要进入属性,请转到工具 - >选项 - >调试并取消选中'跳过属性和运算符(仅管理)'。 步入:踩过属性System.Exception.get_InnerException'。要进入属性,请转到工具 - >选项 - >调试并取消选中'跳过属性和运算符(仅管理)'。 步入:踩过属性&System; Type.TypeLoadException.get_Message'。要进入属性,请转到工具 - >选项 - >调试并取消选中'跳过属性和运算符(仅管理)'。 步入:踩过属性&System; System.Console.get_Out'。要进入属性,请转到工具 - >选项 - >调试并取消选中'跳过属性和运算符(仅管理)'。 在Oracle.DataAccess.Client.OpsInit.CheckVersionCompatibility(String version) 在Oracle.DataAccess.Client.OracleInit.Initialize() 在Oracle.DataAccess.Client.OracleConnection..cctor()无法加载DLL' OraOps12.dll':找不到指定的模块。 (HRESULT异常:0x8007007E)
库OraOps11w
(实际上是不同的版本)在安装Oracle客户端的文件夹中可用。我检查了每台机器的PATH系统变量,并清楚地指出了正确的路径。
GAC在3个案例中看起来不同。笔记本电脑1显示完全混乱 - 正如我之前提到的许多重新安装的结果。笔记本电脑3(旧的工作正常)只显示1个Oracle.DataAcces条目和2个策略记录。笔记本电脑2也显示与笔记本电脑3相同的库,但它不起作用。我想编辑GAC列表但不幸的是由于缺乏管理员权限,我无法手动或使用Gacutil.exe
执行此操作。如果这可以解决问题,唯一的选择是使用正确的库安装包。
我还找到了一个教程,建议卸载项目并编辑csproj
。我纠正了一些值,但这也没有带来预期的结果。
一个讨论提到有缺陷的类可能有静态构造函数,但OracleBulkCopy
没有任何静态元素。
我已经没有想法如何解决这个问题了。让你的某个人遇到类似的问题,并管理克服了这个问题?
答案 0 :(得分:1)
实际的错误信息是:
无法加载DLL'OraOps12.dll':找不到指定的模块。
我想问题是Oracle客户端工具没有正确安装,或者位错误(32/64)。这是ODP.NET和Oracle客户端工具的一个非常常见的问题,有时难以诊断。
在所有机器中安装相同版本的ODP.NET,并为您的机器提供正确的位。