2012-10-15 25 views
2

这是我第一次尝试使用NUnit。我已经使用NuGet将NUnit安装到我的Visual Studio项目中。正如你可以在下面的图片中看到,它引用nunit.framework,版本2.6.1.12217 ...为什么NUnit期望旧版本的框架?

Visual Studio project

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

Windows App

...并试图加载我的测试组件...

Load fail

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

任何想法,如果我做错了什么?

+0

打开项目文件,检查XML并确保设置了NUnit参考的正确路径。 – Arran

+0

XML中的路径看起来很好。 –

回答

4

另一种可能性是,你所引用的是对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> 
     ... 
+0

谢谢Catch22。我还没有机会尝试这个,但希望我能在一周内完成。 –

+0

不幸的是,我很久以前就试过了。我今天再试一次,希望能够测试你的答案。一切正常,所以我不知道问题是什么。你的回答是有道理的,它似乎可能是我的问题,所以我会接受它。谢谢。 –

0

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

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

如果在任何地方没有具体提到旧版本,那么旧版本可能仍在GAC中 - 尝试专门引用新版本,并且应该“赢”。

编辑 - 参考例子:

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

嗨Seldary。感谢那。我做了一次搜索,发现了两个完全不相关的csproj文件,它们引用了该版本。我不明白它有什么关系,因为它们没有关系,不在相同的解决方案中,而是编译到完全不同的位置。然后,我查看了C:\ Windows \ assembly并找不到nunit.framework。所以我添加了新版本(2.6.1.12217),并将我的项目设置为专门引用该版本......并且仍然给我提供了同样的错误。 –

+0

我发现一件看起来很可疑的事情是,在我的NuGet包文件中,我有,但在NUnit GUI关于页面“Framework Version:Net 3.5” –

+0

您不应该在那里手动添加dll ...这很重要,因为如果CLR首先加载该版本,那么(如果您没有引用特定版本),CLR将使用加载的程序集并且不会再烦扰地再次加载程序集。 **尝试从这些项目中删除特定版本**(请参阅编辑)。 – seldary

相关问题