在运行时更新应用程序的库(DLL)?

有没有办法在C#中运行应用程序时更新DLL? 例如,如果存在具有如下函数的DLL:

void write() { Console.WriteLine("LALALA"); } 

它在一个线程中调用,在调用之间有1秒的hibernate时间。

现在,我写了新版本:

 void write() { Console.WriteLine("LA LA LA\n"); } 

我可以在运行时使用这个新DLL更新旧的DLL吗? 重要的是我的APP一直在运行,没有计量器…但我想更新库是个例外。 我错了吗?

如果您的代码可以在逻辑上隔离成单独的DLL,您可以使用(如其他人所提到的)远程处理或System.AddIn框架。 根据function的集成程度,它可能过于复杂和/或过度杀伤。 System.AddIn方法的一个好处是可以卸载程序集,使用新版本替换dll,并在不停止应用程序的情况下重新加载 – 它仅适用于轻量级插件体系结构,并且跨越“隔离边界”的性能不是不会那么好。

如果区域足够小(例如http://www.ironpython.net/ ),脚本编写也可能有用 – 您可以将代码存储在文本文件(或数据库中,或任何地方)中,并从那里加载/运行它。 然后只需替换代码并重新加载它。

我想这一切都取决于你是否能够确定可能发生的变化,以及是否存在适合它的隔离过程。 要做到整个应用程序并不容易!

您无法在使用时更新dll,但是可以。

  • 使用新文件名制作dll的副本
  • 将dll的副本加载到应用程序域中
  • 使用.net远程处理与该应用程序域对话
  • 当原来的dll改变重复以上

这就是Asp.net所做的事情。 所以另一个选择是使用Aps.net来托管你的应用程序。