当前位置:  开发笔记 > 编程语言 > 正文

在c#中执行然后删除DLL

如何解决《在c#中执行然后删除DLL》经验,为你挑选了1个好方法。

我正在创建一个自我更新的应用程序,我将大部分代码放在一个单独的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引用



1> Jeff Yates..:

我曾经管理类似的东西的唯一方法是将DLL放在一个单独的AppDomain中,试图删除它.我卸载其他AppDomain,然后从磁盘中删除DLL.

如果你正在寻找一种方法来执行更新,我会想到一个存根exe,它会产生真正的AppDomain.然后,当该存根exe检测到要应用更新时,它将退出其他AppDomain,然后执行更新魔术.

编辑:更新程序不能与正在更新的东西共享DLL,否则它将锁定这些DLL,从而防止它们被删除.我怀疑这就是你仍然得到例外的原因.更新程序必须是独立的,不依赖于其他AppDomain使用的任何内容,反之亦然.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有