mscorlib.dll

时间:2015-10-02 14:30:07

标签: c# wpf oracle oracle11g odp.net

我创建了这个主题,因为即使有很多类似的线程我也找不到答案。

最近,许多用户报告在Visual Studio中创建的工具停止工作。这是一个用C#编写的WPF应用程序,其目的是获取Excel电子表格并将其导出到Oracle数据库以进行进一步计算。

当应用程序尝试创建一个OracleBulkCopy库的成员Oracle.DataAccess时,应用程序崩溃(它作为参考添加到项目中)。该项目作为安装包在用户之间分发,其想法是他们不需要安装任何其他东西。

目前我正在3台机器上调查此问题:

  • 1 - 我的普通笔记本电脑
  • 2 - 在我的笔记本电脑上设置虚拟机
  • 我的同事提供的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问题之后,这是错误消息和我的发现。

<photo1>

  1. 我找到了一些关于InnerException的信息,我抓住了尝试...抓住。描述如下:
  2.   

    内部异常

         

    单步执行:单步执行属性System.Exception.get_InnerException&#39;。要进入属性,请转到工具 - >选项 - &gt;调试并取消选中&#39;跳过属性和运算符(仅管理)&#39;。   步入:踩过属性System.Exception.get_InnerException&#39;。要进入属性,请转到工具 - >选项 - &gt;调试并取消选中&#39;跳过属性和运算符(仅管理)&#39;。   步入:踩过属性&System; Type.TypeLoadException.get_Message&#39;。要进入属性,请转到工具 - >选项 - &gt;调试并取消选中&#39;跳过属性和运算符(仅管理)&#39;。   步入:踩过属性&System; System.Console.get_Out&#39;。要进入属性,请转到工具 - >选项 - &gt;调试并取消选中&#39;跳过属性和运算符(仅管理)&#39;。   在Oracle.DataAccess.Client.OpsInit.CheckVersionCompatibility(String version)   在Oracle.DataAccess.Client.OracleInit.Initialize()   在Oracle.DataAccess.Client.OracleConnection..cctor()无法加载DLL&#39; OraOps12.dll&#39;:找不到指定的模块。 (HRESULT异常:0x8007007E)

    OraOps11w(实际上是不同的版本)在安装Oracle客户端的文件夹中可用。我检查了每台机器的PATH系统变量,并清楚地指出了正确的路径。

    1. GAC在3个案例中看起来不同。笔记本电脑1显示完全混乱 - 正如我之前提到的许多重新安装的结果。笔记本电脑3(旧的工作正常)只显示1个Oracle.DataAcces条目和2个策略记录。笔记本电脑2也显示与笔记本电脑3相同的库,但它不起作用。我想编辑GAC列表但不幸的是由于缺乏管理员权限,我无法手动或使用Gacutil.exe执行此操作。如果这可以解决问题,唯一的选择是使用正确的库安装包。

    2. 我还找到了一个教程,建议卸载项目并编辑csproj。我纠正了一些值,但这也没有带来预期的结果。

    3. 一个讨论提到有缺陷的类可能有静态构造函数,但OracleBulkCopy没有任何静态元素。

    4. OracleBulkCopy class

      我已经没有想法如何解决这个问题了。让你的某个人遇到类似的问题,并管理克服了这个问题?

1 个答案:

答案 0 :(得分:1)

实际的错误信息是:

  

无法加载DLL'OraOps12.dll':找不到指定的模块。

我想问题是Oracle客户端工具没有正确安装,或者位错误(32/64)。这是ODP.NET和Oracle客户端工具的一个非常常见的问题,有时难以诊断。

在所有机器中安装相同版本的ODP.NET,并为您的机器提供正确的位。