首页 > 解决方案 > 如何在 C# 应用程序中在运行时加载 DLL,调用方法,然后卸载它?

问题描述

我正在尝试使用某种“自动更新”应用程序。想法是拥有不可更改的代码,它将引用一个 DLL,所有逻辑都包含在 DLL 中。基本上,它将通过每 5 分钟查找一次更新来工作。如果有可用更新,则调用 dispose 方法,从 DLL 中处理所有内容,然后下载新的 DLL 并引用它,然后运行它的 start 方法。

我有这样的事情:

var DLL = Assembly.LoadFile(path_to_appdata+"dll_name.dll");

runner_dll = DLL.GetType("dll_namespace_name.Manager");
var c = Activator.CreateInstance(runner_dll);
var method = runner_dll.GetMethod("run_client");
method.Invoke(c, new object[] { });             

它有效。但是,问题是我无法更新 DLL,因为它正在使用中。我读过我不能直接从 Assembly 中删除它,但我可以将它加载到 AppDomain 中,然后卸载 AppDomain。但是,我已经尝试过这样做,但似乎没有成功。

任何帮助将不胜感激。

标签: c#dllruntimeappdomain

解决方案


我已经找到了答案,但这与引用 DLL 无关。我现在的解决方案是将所有内容捆绑在一个可执行文件中,然后从第一个应用程序启动它。第一个应用程序还将确保停止它并在必要时进行更新。


推荐阅读