2012-04-09 63 views
4

我爲NUnit單元測試編寫了自定義類庫。它在{project root} \ bin \ Debug \文件夾中創建了一個包含我的.NET IL代碼的dll文件。在這個類庫中運行NUnit單元測試可以正常工作,但如果我嘗試再次編譯我的類庫,則會出現此錯誤。 NUnit不釋放鎖。這是什麼造成的?我怎樣才能防止這種情況發生?NUnit不會釋放自定義類庫DLL的鎖定...運行NUnit後無法編譯類庫

的Visual Studio錯誤的NUnit後編譯時會運行第一次:

錯誤{錯誤#} {類庫項目名稱}無法複製文件{類庫項目的根文件夾} +「\ BIN \調試\測試.dll「複製到」bin \ Debug \ Tests.dll「中。該進程無法訪問文件'bin \ Debug \ Tests.dll',因爲它正在被另一個進程使用。

因此,我可以更改代碼的唯一方法是關閉NUnit並重新打開NUnit。我正在使用NUnit 2.6。這非常煩人。

回答

1

我找到了原因。也許NUnit開發人員可以解決這個問題。現在,我有以下描述的解決方法。

如果您沒有* .nunit,* .VisualState.xml(自動生成的NUnit文件)和* .config(NUnit配置文件,它是使用System.Configuration從Visual Studio類庫中引用的,而不是NUnit的配置文件文件設置)在類庫根文件夾內,這將發生。 (並且我的* .config文件與我的* .nunit文件命名相同,因此我有Tests.config和Test.nunit,兩者都共享名稱「Tests」)

因此,例如,當我收到此錯誤時,我有以下設置:

我的類庫被稱爲「Tests.csproj」。並假設Tests.csproj在「C:\ Source \ Tests \」中。這將使「C:\ Source \ Tests \」作爲我的項目文件夾的根。我的DLL位於「C:\ Source \ Tests \ bin \ Debug \ Tests.dll」中。上面描述的NUnit文件位於「C:\ Source \ Tests \ NUnit \」中。

當我將NUnit文件移動到「C:\ Source \ Tests \」(類庫項目根文件夾)時,我在嘗試編譯Visual Studio類庫項目時沒有遇到此問題。這種造成這種結構的文件夾結構必須混淆NUnit程序。

我有一個單獨的文件夾的原因是保持所有的NUnit文件分開。修復此問題後,我將所有* .nunit,* .xml和* .config文件作爲前綴加上「nunit_」,以便將它們全部組合在一起。

1

我發現要解決的唯一方法就是重新啓動NUnit。這會釋放鎖定,但下一次運行測試時可能會遇到同樣的問題。

然而,你可以看看這個信息,這可能有助於:

這可能是一個重新加載設置,per this google groups thread

See the Assembly Isolation section

終於還是:

It could be the location of your code bases?

+0

當我第一次開始使用NUnit(頭幾個月)時,它沒有這樣做。它上週開始鎖定文件。我更好奇如何防止這種情況,而不是如何解決這個問題。如果您找到解決方案,請告訴我。現在,我只是用Windows工具強制殺死鎖。 – MacGyver 2012-04-09 17:01:45

+1

@MacGyver我更新了我的答案。使用程序集重新加載可能對此有所幫助? – 2012-04-09 17:05:29

+0

謝謝你幫助賈斯汀..我會給你幾點分享這個知識..最後你的評論。如果您發現與我的工作流程不同的工作流程也會導致此問題,那麼知道這一點很有幫助。 – MacGyver 2012-04-09 17:28:36