我正在创建一个自我更新的应用程序,我将大部分代码放在一个单独的DLL中.这是命令行,最终将在Mono上运行.我只是试图让这段代码在命令行的Windows上用C#工作.
如何创建ac#应用程序,我可以在运行时删除支持的dll?
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中,由Commandline应用程序和VersionUpdater.Core.dll引用
我曾经管理类似的东西的唯一方法是将DLL放在一个单独的AppDomain中,试图删除它.我卸载其他AppDomain,然后从磁盘中删除DLL.
如果你正在寻找一种方法来执行更新,我会想到一个存根exe,它会产生真正的AppDomain.然后,当该存根exe检测到要应用更新时,它将退出其他AppDomain,然后执行更新魔术.
编辑:更新程序不能与正在更新的东西共享DLL,否则它将锁定这些DLL,从而防止它们被删除.我怀疑这就是你仍然得到例外的原因.更新程序必须是独立的,不依赖于其他AppDomain使用的任何内容,反之亦然.