2010-09-27 41 views
4

有没有办法在应用程序运行在C#时更新DLL?例如,如果有一个函数如下所示的DLL:在运行时更新应用程序的库(DLL)?

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

而且它在调用之间的睡眠时间为1秒的线程中调用。现在

,我写的新版本:

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

我可以与运行时这个新的更新旧的DLL?重要的是,我的应用程序一直在运行,没有米什么......但我想更新库是一个例外。我错了吗?

+0

通过.NET远程处理和使用独立的应用程序域,这是非常困难和极其出色的规划。 – leppie 2010-09-27 12:27:20

回答

3

如果您的代码可以在逻辑上分离成单独的DLL,您可以使用(如其他人所述)远程或System.AddIn框架。取决于功能的集成程度,它可能太复杂和/或矫枉过正。 System.AddIn方法的一个好处是可以卸载程序集,用新版本代替dll,并在不停止应用程序的情况下重新加载,但它仅为轻量级插件体系结构设计,并且跨越“隔离边界”的性能不是将不会如此伟大。

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

我想这一切都归结为您是否可以确定可能发生什么变化,以及是否存在适合它的隔离过程。要做到整个应用程序并不容易!

3

无法更新DLL正在使用时,但是你可以。

  • 使该DLL的一个副本,一个新的文件名
  • 加载DLL的复制到一个应用程序域
  • 谈话到应用程序域与.NET远程
  • 当原始的dll文件的变化重复以上步骤

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

相关问题