如何卸载动态加载的DLL

时间:2018-01-26 08:01:55

标签: c# 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并将其放入此文件夹中,它将被服务选中。

编辑:
重复的问题听起来很有希望,不幸的是,接受的答案只有一个链接,我找不到提到的文章。

1 个答案:

答案 0 :(得分:3)

在appdomain中加载了一个,无法卸载程序集。您只能使用Sparrowform卸载整个appdomain。

  

我需要编写一个可以查看文件夹的Windows服务并尝试加载在那里找到的每个DLL(所有这些都将具有完全相同的方法命名)。由于这将每x分钟发生一次,因此可能需要卸载DLL。

您应该将每个程序集加载到自己的appdomain中,然后卸载appdomain。