如何让NUnit尊重我的testassembly.dll.config中的bindingRedirect?

时间:2010-03-10 22:08:51

标签: visual-studio nhibernate fluent-nhibernate nunit

我正在使用Fluent Nhibernate的1.0 RTM,以及3.0版本的NHibernate。为此,我需要将以下内容添加到我的.config文件中:

  <runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="NHibernate" culture="neutral" publicKeyToken="aa95f207798dfdb4"/>
    <bindingRedirect oldVersion="2.1.0.4000" newVersion="3.0.0.1001"/>
  </dependentAssembly>
</assemblyBinding>

这在使用TestDriven.net插件运行集成测试时效果很好,但在NUnit gui或console runner中失败并出现以下错误:

System.IO.FileLoadException:无法加载文件或程序集'NHibernate,Version = 2.1.0.4000,Culture = neutral,PublicKeyToken = aa95f207798dfdb4'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

如何让NUnit尊重我的bindingRedirect并成功运行我的集成测试?

2 个答案:

答案 0 :(得分:13)

在CI服务器上运行nunit时,我遇到了类似的问题(竹子,具体而言)。我理解的方式是,如果nunit在自己的进程空间中运行(就像你只是从命令行运行它),那么它就可以正确读取.dll.config程序集绑定重定向。但是,如果CI服务器在CI服务器的进程空间内运行nunit,则它会尝试从父进程获取配置。要确保nunit在其自己的进程空间中运行,请添加命令行选项/process:multiple。至少,这对我有用,以便nunit能够正确找到重定向绑定。

TL; DR:使用命令行选项/process:multiple

答案 1 :(得分:3)

密钥是将它放在正确的.config文件中。请参阅Does redirecting assembly binding work for unit testing with a test runner?

另一种方法是针对NHibernate 3.0编译fluent-nhibernate。如果它有编译错误,请询问开发团队和/或分叉源并进行编译。