簡體   English   中英

如何卸載動態加載的DLL

[英]how to unload a dynamicly loaded DLL

我有一個用c#編寫的DLL,我在我的客戶端加載如下:

string moduleFileName = Path.GetDirectoryName(Application.ExecutablePath.ToString()) + @"\ReportGarage.dll";
string functionName = "GetReportName";

ObjectHandle moduleInstance = Activator.CreateInstanceFrom(moduleFileName, "ReportDLL.ClassReport");
MethodInfo mi = moduleInstance.Unwrap().GetType().GetMethod(functionName);
string reportName = Convert.ToString(mi.Invoke(moduleInstance.Unwrap(), null)); 

MessageBox.Show(reportName);

這有點像我期望的那樣,但我找不到如何再次卸載這個DLL。
所以我的問題是:

我需要卸載它嗎?
如果我不這樣做會發生什么,我會多次調用此代碼?
如果我需要卸載它,怎么樣?

也許我需要在上面的其他方法中加載/卸載,我不知道。
DLL也是由我編寫的,因此我可以根據需要進行任何更改。

編輯:
讓我解釋一下我需要什么(避免xy問題)。

我想要做的是編寫一個Windows服務,在DLL的特定文件夾中查找,然后嘗試加載它們並調用方法(每個dll中的方法名稱相同)
然后我可以編寫一個新的DLL並將其放入此文件夾中,它將被服務選中。

編輯:
重復的問題聽起來很有希望,不幸的是,接受的答案只有一個鏈接,我找不到提到的文章。

一個加載在appdomain中,無法卸載程序集。 您只能使用appdomain.unload卸載整個appdomain

我需要編寫一個可以查看文件夾的Windows服務,並嘗試加載在那里找到的每個DLL(所有這些都將具有完全相同的方法命名)。 由於這將每x分鍾發生一次,因此可能需要卸載DLL。

您應該將每個程序集加載到自己的appdomain中,然后卸載appdomain。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM