使用Asp.Net Core进行自我更新/卷影复制

Rob*_*ner 12 shadow-copy auto-update appdomain .net-core asp.net-core

我正在编写一个Asp.Net Core应用程序,该应用程序应该能够自行更新(在运行时替换自己的二进制文件).

这篇MSDN文章用经典的.Net框架描述了阴影复制,这正是我所需要的.但.Net Core中缺少整个AppDomain的东西.

所以我的问题是:

  • 在.Net Core中是否有另一种方法可以启用阴影复制程序集?
  • .Net Core中是否有其他机制可以构建自我更新的应用程序?

Rob*_*ner 11

由于.NET Core中没有用于执行此操作的内置机制,因此我最终实现了自己的自定义解决方案.它的工作方式大致如下:

  1. 正在运行的应用程序将新二进制文件下载并提取到新文件夹.
  2. 正在运行的应用程序启动一个小更新程序进程 以下参数通过命令行传递给更新程序进程:
    • 正在运行的应用程序的进程ID
    • 正在运行的应用程序的二进制路径
    • 下载的二进制文件的路径
  3. 正在运行的应用程序退出.
  4. 更新程序进程等待,直到正在运行的应用程序已退出(使用进程ID)或强制终止正在运行的应用程序,如果它在给定的超时内没有自行退出.
  5. updater进程删除现有的二进制文件并复制新下载的二进制文件.
  6. updater进程启动主应用程序的新版本.

确保在主应用程序中尽可能多地执行(下载,解包,验证......)并使更新程序过程尽可能简单(最大限度地降低失败风险).

事实证明这种方法非常稳定.

  • @Robert,您好,如果您已经创建了解决方案并将其开源(因为它看起来可能非常通用),那么您的解决方案是否可以在任何地方使用(例如nuget)?谢谢! (3认同)
  • gist.github.com 上有任何类型的片段吗? (2认同)

dav*_*owl 5

.NET Core 中没有内置卷影复制功能