【发布时间】:2009-05-29 14:48:41
【问题描述】:
我正在创建一个自我更新的应用程序,其中大部分代码都在一个单独的 DLL 中。它是命令行,最终将在 Mono 上运行。我只是想让这段代码在命令行的 Windows 上的 C# 中工作。
如何创建一个可以在运行时删除支持 dll 的 c# 应用程序?
AppDomain domain = AppDomain.CreateDomain("MyDomain");
ObjectHandle instance = domain.CreateInstance( "VersionUpdater.Core", "VersionUpdater.Core.VersionInfo");
object unwrap = instance.Unwrap();
Console.WriteLine(((ICommand)unwrap).Run());
AppDomain.Unload(domain);
Console.ReadLine();
在 ReadLine,VersionUpdater.Core.dll 仍被锁定,无法删除
ICommand 接口位于 VersionUpdater.Common.dll 中,命令行应用和 VersionUpdater.Core.dll 都引用了该接口
【问题讨论】:
-
你为什么要把它做成一个wiki?你应该接受代表。这是个好问题。
-
哦,拍摄不知道我没有得到代表
-
您肯定已经在这里回答了自己的问题。如果您是更新者并且您正在更新共享代码,那么两个 AppDomains 都会锁定该代码,因此您无法删除它。更新者不能尝试更新自己的代码,那是行不通的。
-
我想我要在命令行应用程序上编写启动和停止调用,这样我就可以等待线程完成而不是终止进程来更新它。
-
使用 MEF 或 Mono Addins 可能会有解决方案
标签: mono appdomain self-updating