2010-10-07 54 views
1

我有代碼,需要我Pinvoke到第三方本機DLL。問題是,當我使用Nunit測試運行器進行這些測試時,本機dll被nunit進程鎖定(nunit.exe和nubit-agent.exe)。因此,我的後構建複製命令因此失敗。如何強制Nunit釋放本機DLL上的句柄?

生成'成功構建'(包括構建後命令)的唯一方法是首先關閉Nunit,重新構建項目並重新打開Nunit(清洗,漂洗和重複)。這變得乏味和令人沮喪。

有什麼辦法強制單位釋放所有句柄到加載的程序集?我對NUnit設置稍微探索一下,但無濟於事。

附註:我有其他的想法是我如何實際使用這個第三方dll(它實際上是C#SWIG版本的QuantLib)。所以實際上可能會有包裝C#代碼和使用的IDisposable模式的問題(基於我在另一個問題上收到的評論)。

+0

你有沒有找到這個問題的答案?我處於同樣的情況。 – 2012-01-16 11:50:30

+0

@ A.Murray - 不幸的不是。 – Ahmad 2012-01-16 11:56:36

回答

0

您可以使用類似unlocker to release all handles之類工具的命令行選項。或者,您可以將pinvoke函數加載到單獨的應用程序域中,然後釋放該域。

編輯:

在第二種情況下。當創建一個AppDomain,然後將P/Invokes的程序集加載到該域中,但不要將該程序集加載到主App域中時。然後當測試完成時卸載App域。 See here for an example.一旦域被卸載,P/Invoked Dll也應該被釋放。

+0

Unlocker每次都會崩潰Nunit。你可以擴展第二點嗎? – Ahmad 2010-10-07 08:33:51