为什么NUnit期望该框架的旧版本?

时间:2012-10-15 15:44:39

标签: .net visual-studio-2010 unit-testing nunit

这是我第一次尝试使用NUnit。我已经使用NuGet将NUnit安装到我的Visual Studio项目中。如下图所示,它引用了nunit.framework,版本2.6.1.12217 ......

Visual Studio project

...然后我安装了最新的Windows应用程序(NUnit-2.6.1.msi)....

Windows App

...并尝试加载我的测试程序集......

Load fail

...但由于某种原因,它期待nunit.framework的版本2.5.10.11092。

我知道我做错了吗?

2 个答案:

答案 0 :(得分:5)

另一种可能性是您引用了第三方程序集,该程序集具有对特定版本的nunit.framework的引用。

例如,我遇到了同样的问题,因为我引用了TeamAgile.UnitTestExtensions.dll

要检查特定程序集是否具有对nunit.framework.dll的引用,请使用ILDASM并检查extern中的MANIFEST元数据。

Screenshot of ILDASM

从截图中可以看出,这个程序集引用了nunit.framework的2.4.6版本。

要解决此问题,请将绑定重定向条目添加到应用程序配置文件,以将旧版本映射到新版本。

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="nunit.framework" publicKeyToken="96d09a1eb7f44a77" culture="Neutral" />
        <bindingRedirect oldVersion="2.5.10.11092" newVersion="2.6.1.12217" />
      </dependentAssembly>
      ...

答案 1 :(得分:0)

您的一个测试项目(或他们引用的第三方/项目)引用了该特定版本。检查引用NUnit的所有csproj文件并查找该版本。

一种简单的方法是确保在* .csproj中“搜索文件”中的“ 2.5.10.11092 ”(我使用notepad ++)。

如果在任何地方都没有特定的旧版本参考,那么旧版本可能仍然在GAC中 - 尝试专门引用新版本,并且应该“赢”它。

编辑 - 参考示例:

<Reference Include="nunit.framework">
  <HintPath>..\..\..\ExternalLibrary\NUnit\nunit.framework.dll</HintPath>
</Reference>