使用System.Data.Common.DbProviderFactory时,我们在NUnit测试中运行代码时会出现此错误,但在运行常规Web应用程序时则不会。
错误
System.InvalidCastException: [A] Oracle.DataAccess.Client.OracleParameter无法强制转换为 [B] Oracle.DataAccess.Client.OracleParameter。 A型起源于 'Oracle.DataAccess,Version = 2.112.1.2,Culture = neutral, PublicKeyToken = 89b483f429c47342'在上下文'默认'位置 'C:\ WINDOWS \装配\ 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 \组件\ GAC_32 \ Oracle.DataAccess \ v4.0_4.112.1.2__89b483f429c47342 \ Oracle.DataAccess.dll'。
我们有单元测试项目引用的2.112.1.2程序集,我们甚至尝试'使用特定版本'和'复制本地',但它只是没有看到它继续从GAC中的较新版本加载DLL
答案 0 :(得分:0)
原来不会将dll复制到测试运行器的执行文件夹中。幸运的是,您可以指定加载GAC的特定dll。
我们将其添加到单元测试项目中的app.config中。 注意 <add />
元素
<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>