nHibernate未在命令行上运行的MSTests中创建Oracle驱动程序
我已经在这个问题上工作了几个星期了,我非常沮丧。因此,我将尽我所能提供所有信息,并希望一切顺利 我的团队正在构建一个新的应用程序。这是字母汤:nHibernate未在命令行上运行的MSTests中创建Oracle驱动程序,nhibernate,command-line,oracle11g,mstest,Nhibernate,Command Line,Oracle11g,Mstest,我已经在这个问题上工作了几个星期了,我非常沮丧。因此,我将尽我所能提供所有信息,并希望一切顺利 我的团队正在构建一个新的应用程序。这是字母汤: .Net 4.5.1 nHibernate 4.0.0.4000和FluentNHibernate 2.0.3.0 Oracle 11g(Oracle.DataAccess 2.112.1.0,其复制本地设置为true) Visual Studio 2013是IDE Windows7专业版 我正在将该应用程序编译为32位应用程序,并已确认已安装32位
- .Net 4.5.1
- nHibernate 4.0.0.4000和FluentNHibernate 2.0.3.0
- Oracle 11g(Oracle.DataAccess 2.112.1.0,其复制本地设置为true)
- Visual Studio 2013是IDE
- Windows7专业版
OracleDataClientConfiguration.Oracle10
.ConnectionString(connectionString)
.Driver("NHibernate.Driver.OracleDataClientDriver")
.ShowSql()
.FormatSql();
我在命令行上运行的代码如下:
(cd to the directory where the test .dll is)
>"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\MSTest.exe" /testcontainer:MyTests.dll /test:UnitTests
我觉得我错过了一些东西。有什么想法吗
更新:找到解决方案 这是一个奇怪的例子。我遵循下面Fran的解决方案,安装了Oracle.ManagedDataAccess包,并将上面配置中的NHibernate驱动程序更改为NHibernate.driver.OracleManagedDataClient驱动程序。根据我们的快速评论讨论,这会导致一个新错误: 初始化方法MyTests。安装程序引发异常。NHibernate.HibernateException:NHibernate.HibernateException:无法从NHibernate.driver.OracleManagedDataClient创建驱动程序。-->System.Reflection.TargetInvocationException:调用的目标已引发异常。-->System.Configuration.ConfigurationErrorsException:未能找到或加载已注册的.Net Framework数据提供程序 然后Fran带我到了鼓励我逐件检查Oracle配置的地方。还有什么比创建测试更好的方法呢
var x = new OracleConnection(connectionString);
x.Open();
Assert.IsTrue(x.State == System.Data.ConnectionState.Open);
x.Close();
Assert.IsFalse(x.State == System.Data.ConnectionState.Open);
在快速尝试运行此测试时,我使用上面提到的脚本运行了整个UnitTests集合。瞧,每个测试都通过了!
在进行尽职调查时,请尝试以下方法
- 我对该测试进行注释、清理、重建,然后再次运行脚本。失败
- 我返回到旧的Oracle驱动程序,并在中添加新的测试。清理、重建、运行。失败
- 重新添加新的Oracle驱动程序,确保新测试仍处于运行状态。运行新测试以外的测试。通行证
出于某种原因,新驱动程序和在测试中显式引用它的组合似乎解决了这个问题。我愿意接受任何关于原因的理论,但我敢打赌这是一个新问题。我会停止使用oracle驱动程序的位特定版本,转而使用托管驱动程序()。它有点不可知,根本不需要您安装Oracle客户端 我实际上找到了问题的解决方案,这一切都与运行时如何加载
Oracle.DataAccess.dll
文件有关(披露:我在同一个项目上与wadeb合作)
除了Jenkins工作区中的build output文件夹外,服务器上的每个位置都在搜索Oracle.DataAccess.dll,因此从GAC中提取dll文件
用于查找DLL文件的文件路径之一是“当前可执行文件”所在的文件夹。在我们的例子中,“当前可执行文件”是mstest.exe
。将Oracle.DataAccess.dll文件复制到C:\ProgramFiles(x86)\Microsoft Visual Studio 12.0\Common7\IDE
中,成功了
成功了吗。对
是黑客吗?当然可以,但现在它不必升级到托管Oracle驱动程序即可工作
我们的服务器没有使用与托管驱动程序一起工作的Oracle客户端,在服务器升级之前,不允许出现中断的持续集成构建。我遇到了同样的错误,我将测试切换到x64,现在它工作得很好:
我尝试了此操作,并收到以下新错误:
初始化方法MyTests。安装程序引发异常。NHibernate.HibernateException:NHibernate.HibernateException:无法从NHibernate.driver.OracleManagedDataClient创建驱动程序。-->System.Reflection.TargetInvocationException:调用的目标已引发异常。-->System.Configuration.ConfigurationErrorsException:未能找到或加载已注册的.Net Framework数据提供程序
我已确保将已配置的驱动程序更改为Oracle.ManagedDataClient驱动程序您的测试项目是否有一个app.config镜像您正在测试的项目的app.config或web.config?确实如此。我认为所有相关领域都是一样的。您是否希望出现特定的差异?ConfigurationsErrorsException告诉我配置有问题。检查这个问题,尽管这个问题并没有真正解决问题,但它确实导致了问题的解决。请看来函