.net - 在不停止服务的情况下更新 dll

标签 .net windows dll windows-services

我想在不停止服务的情况下更新服务器进程的 dll。我怎么做? 有点像 asp.net 如何自动拾取放在 bin 文件夹中的新 dll。

最佳答案

Asp.Net 使用一种称为 shadow copy 的技术

如果将更新的 dll 复制到应用程序的 bin 子目录中,ASP.NET 运行时会识别出有新代码要执行。由于 ASP.NET 无法将 dll 交换到现有的 AppDomain 中,因此它会启动一个新的 AppDomain。旧的应用程序域是“drain stopped”,即允许现有请求完成执行,一旦它们全部完成,AppDomain 就可以卸载。新的 AppDomain 以新代码开始并开始接收所有新请求。

通常,当一个 dll 加载到一个进程中时,该进程会锁定该 dll,并且您无法覆盖磁盘上的文件。但是,AppDomains 有一个称为 Shadow Copy 的功能,它允许程序集在磁盘上保持解锁和可替换状态。

运行时初始化 ASP.NET,并为 bin 目录启用卷影复制。 AppDomain 会将它需要的任何 dll 从 bin 目录复制到一个临时位置,然后锁定并将 dll 加载到内存中。 Shadow Copy 允许我们在更新期间覆盖 bin 目录中的任何 dll,而无需使 Web 应用程序脱机。

关于.net - 在不停止服务的情况下更新 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/226581/

相关文章:

c# - 在azure中托管共享dll

c# - C# 编译器生成的 .exe 文件是否仅由通用中间语言 (CIL) 组成?

.net - 在 Silverlight 中使用 HttpResponse 上传数据

windows - 是否有 Rust 函数或模块用于迭代连接到 Windows 计算机的所有可移动驱动器?

windows - Windows 版 iTunes 是用什么写成的?

c# - Nuget 不为弱命名程序集生成绑定(bind)重定向

c# - Entity Framework 和面向服务的架构如何入手?

c# - 使用来自非托管代码的托管 COM 对象

c - fopen中的r和rb有什么区别

dll - 安装Microsoft.Xaml.Behaviors.Uwp.Managed的dll冲突如何解决?