提供在运行时“热交换”/更改程序集的功能,而无需重新启动进程

时间:2010-10-18 03:22:37

标签: .net asp.net assemblies

ASP.Net允许您将新程序集复制到应用程序的bin目录中,而无需重新启动任何服务或进程。

我有一个加载用户定义的插件和扩展的应用程序(其中一些是基于COM的) - 我想提供类似的功能(即无需重新启动过程即可更改/更新程序集的功能) 。目前,程序集已锁定,直到进程停止。

ASP.Net如何管理这个?

1 个答案:

答案 0 :(得分:3)

ASP.Net通过使用“影子复制”实现了这一点。看这里: MSDN Shadow Copying

基本上,ASP.Net将程序集复制到不同的文件夹,然后将它们加载到App Domain中。正是这个复制版本的程序集被进程锁定,原始程序集文件(在Bin文件夹中)被解锁。然后,App Domain将配置为监视原始程序集的更改,如果检测到更新,则会创建新的App Domain并将新程序集加载到其中。

此时,任何将来对Web应用程序的请求都将由ASP.Net路由到新的App Domain,同时旧的App Domain保持活动状态以继续提供任何当前正在执行的请求直至完成。当ASP.Net确定旧App Domain不再处理任何请求时,它将被卸载并且“热插拔”已完成。

从您的简短描述中我建议您查看Microsoft MEF。 MEF是一个致力于构建您正在描述的插件体系结构的框架。