C# 使用DbProviderFactory对Oracle对象进行单元测试时出现System.InvalidCastException异常

C# 使用DbProviderFactory对Oracle对象进行单元测试时出现System.InvalidCastException异常,c#,oracle,ado.net,nunit,odac,C#,Oracle,Ado.net,Nunit,Odac,使用System.Data.Common.DbProviderFactory时,当我们在NUnit测试中运行代码时,会出现此错误,但在运行常规web应用程序时,则不会出现此错误 错误 System.InvalidCastException: [A] 无法将Oracle.DataAccess.Client.OracleParameter强制转换为 [B] Oracle.DataAccess.Client.OracleParameter。A型起源于 'Oracle.DataAccess,版本=2.1

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

错误

System.InvalidCastException: [A] 无法将Oracle.DataAccess.Client.OracleParameter强制转换为 [B] Oracle.DataAccess.Client.OracleParameter。A型起源于 'Oracle.DataAccess,版本=2.112.1.2,区域性=中性, PublicKeyToken=89b483f429c47342'在位置处的上下文“Default”中 'C:\Windows\assembly\GAC\U 32\Oracle.DataAccess\2.112.1.2\UUU 89b483f429c47342\Oracle.DataAccess.dll'。 类型B源自“Oracle.DataAccess,版本=4.112.1.2, 区域性=中性,PublicKeyToken=上下文中的89b483f429c47342 位置处的“默认值” “C:\Windows\Microsoft.Net\assembly\GAC\U 32\Oracle.DataAccess\v4.0\U 4.112.1.2\UU 89b483f429c47342\Oracle.DataAccess.dll”


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

结果是DLL没有复制到测试运行程序的执行文件夹。幸运的是,您可以指定要从GAC中加载的特定dll

我们将其添加到单元测试项目的app.config中注意
元素的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>