2013-07-15 34 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