2012-04-24 22 views
1

我有一個項目,其中我使用csc在我的ant腳本中構建了一些C#類。我也寫了一些單元測試,我想用NUnit2.6測試,我的測試類和實際類指的是一個用String Key Name(.snk)編譯的DLL,如果我在我的GAC中安裝了這個DLL (gacutil /我myDLL.dll)一切工作正常。只要我從gac中卸載這個DLL,我就會在構建過程中遇到以下錯誤,當我嘗試使用NUnit運行我的測試時;NUnit無法使用字符串鍵名稱加載dll

Test Error : fromJDynTest1 
[exec] System.IO.FileNotFoundException : Could not load file or assembly 'myDLL, Version=5.1.0.0, Culture=neutral, PublicKeyToken=c0409b584f86b2d6' or one of its dependencies. The system cannot find the file specified. 
[exec] at fromJDynTest1() 
... 
... 

有誰知道如何解決這個問題。讓我知道你是否需要任何其他信息。

感謝

-

SJunejo

回答

1

您正在測試無法看到問題的組件,當你把它在GAC它可以看到彙編代碼。您需要確保您正在測試的代碼在編譯時具有bin目錄中的程序集(可能在程序集引用中的項目中將copy local設置爲false)。

我確信它不是依賴項(在消息中提到)的原因是因爲當程序集放置在gac中時情況已解決。這個錯誤不可能是由於程序集是強命名而引起的。

如果測試代碼引用程序集並且測試代碼沒有引用或者具有相同問題(不在其編譯目錄中),那麼測試代碼失敗。

如果您發佈項目的實際測試或結構會有所幫助。

.NET定位程序集如下:

  1. 確定通過檢查適用的配置文件,包括應用程序配置文件,發行者策略文件和設備配置文件的正確的程序集版本。如果配置文件位於遠程機器上,則運行時必須首先找到並下載應用程序配置文件。
  2. 檢查程序集名稱是否已被綁定到之前,如果是,則使用先前加載的程序集。如果失敗,它現在會再次失敗。
  3. 檢查gac。如果在那裏找到程序集,則運行時將使用此程序集。
  4. 程序集的探測器(如果你在文本編輯器中打開一個.csproj文件,你會看到提示路徑,它試圖幫助.net找到程序集)。
+0

我在執行測試之前在PATH環境變量中添加了程序集路徑....我還需要添加到其他路徑嗎? – SJunejo 2012-04-24 22:47:29

+0

如果它在路徑env變量中,它將不會有任何區別。你必須遵循http://netdn.microsoft.com/en-us/library/yx7xezcf(v=vs.110).aspx中詳細描述的.net的探測路徑。你的應用程序/測試根本無法看到程序集檢查程序集是否被引用,並位於相應的bin/debug bin/release目錄中或者位於Web應用程序的主bin中。 – 2012-04-24 22:50:31

+1

謝謝,我已經將我的外部DLL複製到NUnit/bin目錄中,並且一切正常。感謝您的答覆。 – SJunejo 2012-04-24 22:53:58