2013-07-15 70 views
0

我有一個WinForm應用程序,啓動時我從嵌入式資源(Properties.Resources)中提取* .dll。在運行時釋放/刪除* .dll

我的應用程序需要以後(Ionic.Zip庫)。但是當應用程序關閉時,我怎麼才能刪除這個* .dll?因爲現在我得到一個錯誤the access is denied

我首先需要取消引用嗎?或者有甚至有另一種方法來完全讓我的* .exe中的* .dll?因爲最後它應該只有一個* .exe。

回答

2

您無法從正在運行的AppDomain卸載已加載的dll。

但是,您可以啓動一個新的AppDomain,在那裏加載dll,然後在關閉應用程序時,在AppDomain上加載unload。卸載AppDomain後,解壓縮後的dll不再被正在運行的進程引用,並且可以被刪除。

然而,這有一個後果 - 你只能使用你提取的DLL內創建的AppDomain。 Some googling可能會爲您提供更多信息。

+0

我已經搜索了一下。但是面對另一個問題,我現在創建一個新的AppDomain,並且在那裏我將加載* .dll,但是我必須在VS中從引用中刪除它,對吧?但是然後編譯器抱怨他不知道'Ionic.Zip'。我怎麼能告訴他我以後會加載dll? – Postback

+1

您必須製作一個單獨的程序集,它是引用Ionic.zip dll。你還必須在這個程序集中創建一個類,它啓動使用Ionic.zip dll的代碼。檢查這個答案:http://stackoverflow.com/a/6578195/261050 – Maarten