1

我正在对带有 NHibernate.Driver.OracleDataClientDriver 驱动程序类的 Oracle 数据库使用 NHibernate。我有一个集成测试,当使用 TestDriven.net 通过 IDE 执行时,它可以正确拉回预期数据。但是,当我通过 NUnit GUI 或控制台运行单元测试时,NHibernate 会抛出一个异常,说它找不到 Oracle.DataAccess 程序集。显然,这会阻止我将集成测试作为 CI 流程的一部分运行。

NHibernate.HibernateException : 找不到程序集 Oracle.DataAccess 中的 IDbCommand 和 IDbConnection 实现。确保程序集 Oracle.DataAccess 位于应用程序目录或全局程序集缓存中。如果程序集在 GAC 中,请使用应用程序配置文件中的元素来指定程序集的全名。*

我尝试通过两种方式使程序集可用,将其复制到 bin\debug 文件夹中并在配置文件中添加元素。同样,当通过 IDE 中的 TestDriven 执行时,这两种方法都有效。通过 NUnit GUI/Console 执行时都不起作用。

NUnit Gui 日志显示以下消息。

21:42:26,377 错误 [TestRunnerThread] ReflectHelper [(null)]- 无法加载类型 Oracle.DataAccess.Client.OracleConnection、Oracle.DataAccess。System.BadImageFormatException:无法加载文件或程序集“Oracle.DataAccess,版本=2.111.7.20,Culture=neutral,PublicKeyToken=89b483f429c47342”或其依赖项之一。试图加载格式不正确的程序。

文件名:“Oracle.DataAccess,版本=2.111.7.20,Culture=neutral,PublicKeyToken=89b483f429c47342”---> System.BadImageFormatException:无法加载文件或程序集“Oracle.DataAccess”或其依赖项之一。试图加载格式不正确的程序。

文件名:“Oracle.DataAccess”

我在 Windows 7 64 位上运行 NUnit 2.4.8、TestDriven.net 2.24 和 VS2008sp1。Oracle 数据提供程序 v2.111.7.20、NHibernate v2.1.0.4。

有没有人遇到过这个问题,更好的是,解决了它?


狡猾,谢谢你的回复。但是,NUnit 测试运行程序使用了正确的配置文件,因为我通过从预期的配置文件中提取一个已知值来进行测试。

我假设这与我的配置有关,特别是一般的 Windows 7 或 64 位版本。我继续在构建服务器(W2k3 服务器)上安装/配置了 Oracle 客户端。我将测试移到构建服务器上并运行上述相同的场景,并且测试在所有情况下都按预期工作。

我通过在其他两个开发人员工作站(具有相同工具集版本的 Win XP 32 位)上运行场景来跟踪这一点,并且测试在所有情况下都按预期工作。

我很困惑,但现在很满意。我可以通过 IDE 运行我的集成测试,也可以通过我们的 CI 自动化在构建服务器上执行它们。现在唯一的问题是我无法在我的开发工作站上测试自动化构建项目。

4

3 回答 3

2

当我尝试运行使用 Oracle.DataAccess.dll(odp.net 版本 2.111.7.20)的应用程序时出现此错误。我与应用程序一起发布了 oracle 11g 即时客户端。在 64 位服务器上它会失败。但是,我运送的客户端程序集是 32 位的,所以我编译了一个应用程序版本,并将 CPU 标志设置为 32 位,现在它可以正常工作了。这是因为当您明确告诉它应用程序是 32 位时,服务器会在 wow64 模拟器中运行整个组件。

于 2010-01-06T08:57:52.947 回答
0

我在配置 NHibernate 时遇到了类似的问题。问题是大多数测试运行者都在使用与测试 dll 一起放置的 app.config。但有些版本的 NUnit 没有。这就是为什么您的系统在测试中保持未配置状态的原因。您可以尝试从测试中手动配置 NHibernate。希望能帮助到你

于 2009-11-20T08:03:20.420 回答
0

通过进入测试项目的构建设置并将平台目标从“任何 cpu”更改为“x86”,我可能刚刚在本地机器上解决了类似/相同的问题

于 2010-08-12T18:34:35.990 回答