2012-10-15 63 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

相關問題