当应用程序在C#中运行时,有没有办法更新DLL?例如,如果存在具有如下函数的DLL:
void write()
{
Console.WriteLine("LALALA");
}
在一个线程中调用它,在两次调用之间休眠1秒钟。
现在,我写了新版本:
void write()
{
Console.WriteLine("LA LA LA\n");
}
我可以在运行时使用这个新DLL更新旧的DLL吗?重要的是我的APP一直在运行,没有什么......但我想更新库是个例外。我错了吗?
答案 0 :(得分:3)
您无法在使用时更新dll。但是您可以。
这就是Asp.net所做的事情。所以另一种选择是使用Aps.net来托管你的应用程序。
答案 1 :(得分:3)
如果您的代码可以在逻辑上隔离成单独的DLL,您可以使用(如其他人所提到的)远程处理或System.AddIn框架。根据功能的集成程度,可能过于复杂和/或过度杀伤。 System.AddIn方法的一个好处是可以卸载程序集,用新版本替换dll,并在不停止应用程序的情况下重新加载 - 它仅用于轻量级插件体系结构,并且跨越“隔离边界”的性能不是不会那么好。
如果区域足够小(例如http://www.ironpython.net/),脚本也可能很有用 - 您可以将代码存储在文本文件(或数据库,或任何地方)中,然后从那里加载/运行它。然后只需替换代码并重新加载它。
我想这一切都取决于你是否能够确定可能会发生什么变化,以及是否存在适合它的隔离过程。要完成整个应用程序并不容易!