我正在使用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并成功运行我的集成测试?
答案 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。如果它有编译错误,请询问开发团队和/或分叉源并进行编译。