NUnit DLL版本不匹配。

3
我遇到了一个奇怪的版本不匹配错误。 我所有的 NUnit 测试项目以前都可以使用 NUnit 2.5.7,但现在我将它们切换到使用 NUnit v2.5.10 后,我一直收到以下错误:

FileLoadException: 无法加载文件或程序集 'nunit.framework, version 2.5.7...

注意:我已清理、重新构建并仔细检查了引用,没有问题。
使用 Assembly Binder Log Viewer(见下文),我觉得这个错误的触发器是 Spring.Testing.NUnit.dll...这似乎很奇怪,因为 Spring.Testing.Nunit 1.3.2 Nuget page 中的依赖列表中写着:NUnit (≥ 2.5.7)
你知道我错过了什么吗?
谢谢!
TB.

装配绑定日志条目 (2012年02月07日 @ 16:06:35)

操作失败。 绑定结果:hr = 0x80131040。没有可用的描述。

装配管理器从以下位置加载: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 运行在可执行文件下 F:\robin\4-Development\Workspace\3rdParty\NUnit\2.5.10\nunit-agent.exe --- 下面是详细的错误日志。

=== 预先绑定状态信息 === LOG: 用户 = Mth\tbourguignon LOG: 显示名称 = nunit.framework, Version=2.5.7.10213, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77 (完全指定) LOG: 应用程序基础路径 = file:///F:/robin/4-Development/Workspace/Application LOG: 初始私有路径 = Rh.Robin.Common.Tests\bin\Debug;Rh.Robin.Service.Test\bin\Debug;Rh.Robin.Domain.Unit.Test\bin\Debug;Rh.Robin.Service.Unit.Test\bin\Debug;Rh.Robin.Web.UI.MVC.Unit.Test\bin\Debug LOG: 动态基础路径 = NULL LOG: 缓存基础路径 = C:\Users\tbourguignon.Mth\AppData\Local\Temp\nunit20\ShadowCopyCache\4980_634768419945070499 LOG: 应用程序名称 = Tests_29030132 调用的程序集 : Spring.Testing.NUnit, Version=1.3.2.40943, Culture=neutral, PublicKeyToken=65e474d141e25e07. === LOG: 此绑定在默认加载上下文中开始。 LOG: 没有找到应用程序配置文件。 LOG: 使用主机配置文件: LOG: 使用机器配置文件从 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config。 LOG: 后策略引用: nunit.framework, Version=2.5.7.10213, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77 LOG: GAC查找失败。 LOG: 尝试下载新的URL file:///F:/robin/4-Development/Workspace/Application/nunit.framework.DLL。 LOG: 尝试下载新的URL file:///F:/robin/4-Development/Workspace/Application/nunit.framework/nunit.framework.DLL。 LOG: 尝试下载新的URL file:///F:/robin/4-Development/Workspace/Application/Rh.Robin.Common.Tests/bin/Debug/nunit.framework.DLL。 LOG: 装配下载成功。 尝试设置文件: F:\robin\4-Development\Workspace\Application\Rh.Robin.Common.Tests\bin\Debug\nunit.framework.dll LOG: 进入下载缓存设置阶段。 LOG: 装配名称是: nunit.framework, Version=2.5.10.11092, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77 WRN: 比较装配名称导致不匹配:修订号 ERR: 装配引用不匹配找到的装配定义。 ERR: 设置失败,hr = 0x80131040。 ERR: 装配设置失败 (hr = 0x80131040)。探测终止。

2个回答

2
你从引用较新的 NUnit 版本中获得了什么吗?如果没有,最简单的方法是返回并引用旧版本的 NUnit 程序集,其版本与您的代码中 Spring 引用的版本匹配。
另一个选择是修改你(Spring)应用程序的配置,使用绑定重定向来获取较新版本的 NUnit 组件。
我想知道 Spring 对 NUnit 程序集的引用是否将 Specific Version 设置为 true。虽然这似乎不太可能。这里有一个关于 .NET 在运行时查找和绑定程序集 的参考文献。

我刚刚检查了源代码,Spring.Net的Spring.Testing.NUnit项目将Specific Version设置为false。我可能误解了日志吗? - Timothée Bourguignon
不过,你可以尝试的另一件事是将旧的NUnit程序集放置在全局程序集缓存(GAC)中,正如你从日志中所看到的,这是.NET查找特定版本的第一个地方。只需注意你还需要在所有目标机器上执行此操作。 - Mike Atlas

0
一些奇怪的方式,我设法解决了这个问题......但我仍然不知道导致它的原因。我对引用进行了全面清理,从我的项目中排除了所有NUnit引用,删除了所有DLL并重新引入新的DLL。我只能猜测某个DLL卡在了某个地方,Spring误拾了它而不是新的... 只是一个猜想:(

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接