首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >热部署.net程序集

热部署.net程序集
EN

Stack Overflow用户
提问于 2009-12-07 19:25:59
回答 3查看 1.9K关注 0票数 7

我们有一个在生产服务器上作为Windows服务运行的应用程序。应用程序被划分为几个程序集,主要在部署边界上。我想简化应用程序程序集热修复的部署。目前,我执行以下步骤来部署热修复程序。(我们有一个用于分期的生产环境的副本,所以每件事都要做两次)

  1. 登录到服务器
  2. 停止服务
  3. 备份当前部署的dll
  4. 用修补程序替换(在现有dll上复制修补程序)
  5. 重新启动服务
  6. 在出现意外负载错误时回滚(尚未发生)

我想我想要的是上传(SFTP)一个dll到预置文件夹,并让应用程序拿起新的dll。

我考虑过的一个解决方案是在服务器上运行一个单独的服务。让我们把它称为热修复部署服务。它将监视新文件的文件系统,并从上面的列表中执行步骤2-6。

任何洞察力都是值得赞赏的。我对其他替代方案持开放态度,只要它们减少部署摩擦。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-07 19:32:02

拥有单独的服务可能是你最好的选择。

您可以,潜在地,在一个单一的服务中这样做。但是,实现服务自我更新所需要的“技巧”有点难实现。

您需要做的是让您的服务从非常轻量级的shell服务开始。然后,它可以启动一个单独的绝缘AppDomain,并让该应用程序域加载您的服务程序集,并初始化并运行。

稍后,当您想要更新时(这可以通过服务可以获取的任何事件触发,包括通过FileSystemWatcher将新程序集复制到更新文件夹,通过网络显式告诉它等等),它需要触发一种方法来通知内部AppDomain的类型停止,然后卸载AppDomain。此时,它可以执行上面的步骤3和4。然后,它只需要重新加载AppDomain,重新运行它的初始化,等等。

因为服务将位于一个单独的AppDomain中,所以这一切都可能发生在一个可执行文件中,而不需要停止服务。卸载AppDomain时,它加载的程序集也会被卸载。

这里唯一让您感到困难的要求是,您必须确保不将任何类型从构造的AppDomain传递到主AppDomain中,否则就会将程序集加载到主AppDomain中。这将阻止您在运行时更新它们。

票数 5
EN

Stack Overflow用户

发布于 2009-12-07 19:32:38

在构建服务器上,我们使用powershell脚本远程停止服务、复制新文件并重新启动服务。

票数 2
EN

Stack Overflow用户

发布于 2009-12-07 19:31:44

我认为温莎城堡是“热插拔”程序集的一个很好的选择。

它是一个高级的、支持良好的IoC/DI框架,它帮助您完成您提到的许多任务,除了将文件实际移动到目标机器上。然而,实际的管道将很好地与CW一起处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1862289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档