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

Joh*_*wis 9 nhibernate nunit fluent-nhibernate visual-studio

我正在使用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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

vig*_*ity 13

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

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


Mau*_*fer 3

关键是将其放入正确的 .config 文件中。请参阅重定向程序集绑定是否适用于使用测试运行程序进行单元测试?

另一种方法是针对 NHibernate 3.0 编译 Fluent-nhibernate。如果有编译错误,请询问开发团队和/或分叉源代码并使其编译。

  • 这并不符合 StackOverflow 的精神。http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers (5认同)