0

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

错误

System.InvalidCastException:[A]Oracle.DataAccess.Client.OracleParameter 无法转换为 [B]Oracle.DataAccess.Client.OracleParameter。类型 A 源自位置 '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 的上下文'Default'中.0_4.112.1.2__89b483f429c47342\Oracle.DataAccess.dll'。

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

4

1 回答 1

0

原来 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>
于 2014-02-06T00:48:06.857 回答