C# 更新应用程序';是否在运行时创建库(DLL)?

C# 更新应用程序';是否在运行时创建库(DLL)?,c#,dll,C#,Dll,当应用程序在C#中运行时,是否有方法更新DLL?例如,如果存在具有如下函数的DLL: void write() { Console.WriteLine("LALALA"); } 它是在一个线程中调用的,在调用之间有1秒的睡眠时间 现在,我写了新版本: void write() { Console.WriteLine("LA LA LA\n"); } 我可以在运行时用这个新的DLL更新旧的DLL吗?重要的是,我的应用程序始终处于启动和运行状态,无需计时。。。但我想更新库是个例外

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

void write()
{
    Console.WriteLine("LALALA");
}
它是在一个线程中调用的,在调用之间有1秒的睡眠时间

现在,我写了新版本:

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

我可以在运行时用这个新的DLL更新旧的DLL吗?重要的是,我的应用程序始终处于启动和运行状态,无需计时。。。但我想更新库是个例外。我错了吗?

您不能在dll正在使用时更新它,但是您可以

  • 使用新文件名复制dll
  • 将dll副本加载到应用程序域中
  • 使用.net远程处理与该应用程序域交谈
  • 当原始dll更改时,重复上述步骤

这就是Asp.net在幕后所做的。因此,另一种选择是使用Aps.net托管您的应用程序。

如果您的代码可以在逻辑上隔离到单独的DLL中,您可以使用(正如其他人所提到的)远程处理或System.AddIn框架。不过,这取决于功能的集成程度,它可能过于复杂和/或过于复杂。System.AddIn方法的一个好处是,可以卸载程序集,用新版本替换dll,然后在不停止应用程序的情况下重新加载—它只针对轻量级插件体系结构设计,跨“隔离边界”的性能不会那么好

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


我想这一切都归结于你是否能确定什么是可能的改变,以及是否有一个适合它的隔离过程。对整个应用程序执行此操作并不容易

有了非常困难和非常好的规划,.NET远程处理和使用独立的应用程序域就可以做到这一点。