【问题标题】:System.InvalidCastException in Unit Test with Oracle objects using DbProviderFactory使用 DbProviderFactory 对 Oracle 对象进行单元测试时的 System.InvalidCastException
【发布时间】:2014-02-06 00:48:06
【问题描述】:

在使用 System.Data.Common.DbProviderFactory 时,我们在 NUnit 测试中运行代码时会收到此错误,但在运行常规 Web 应用程序时不会出现此错误。

错误

System.InvalidCastException : [A]Oracle.DataAccess.Client.OracleParameter 无法转换为 [B]Oracle.DataAccess.Client.Oracle 参数。 A型起源于 'Oracle.DataAccess,版本=2.112.1.2,文化=中性, PublicKeyToken=89b483f429c47342' 在上下文“默认”位置 'C:\Windows\assembly\GAC_32\Oracle.DataAccess\2.112.1.2__89b483f429c47342\Oracle.DataAccess.dll'。 B 型源自 'Oracle.DataAccess, Version=4.112.1.2, Culture=neutral, PublicKeyToken=89b483f429c47342' 在上下文中 位置的“默认” 'C:\Windows\Microsoft.Net\assembly\GAC_32\Oracle.DataAccess\v4.0_4.112.1.2__89b483f429c47342\Oracle.DataAccess.dll'。

我们有单元测试项目引用的 2.112.1.2 程序集,我们甚至尝试“使用特定版本”和“复制本地”,但它只是没有看到它继续从 GAC 中的较新版本加载的 DLL .

【问题讨论】:

    标签: c# oracle ado.net nunit odac


    【解决方案1】:

    原来 dll 没有复制到测试运行器的执行文件夹中。幸运的是,您可以指定要从 GAC 加载的特定 dll。

    我们将此添加到单元测试项目的 app.config 中。 注意<add />元素的type属性中的具体汇编版本

    <system.data>
        <DbProviderFactories>
          <clear />
          <add name="Oracle Data Provider" invariant="Oracle.DataAccess.Client" 
               description=".Net Framework Data Provider for Oracle" 
               type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.112.1.2, Culture=neutral, PublicKeyToken=89b483f429c47342" />
        </DbProviderFactories>
    </system.data>
    

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2016-05-03
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 2019-05-01
      • 2017-03-03
      相关资源
      最近更新 更多