Asp.net-Core
使用 Asp.Net Core 進行自我更新/卷影複製
我正在編寫一個 Asp.Net Core 應用程序,它應該能夠自我更新(在執行時替換它自己的二進製文件)。
這篇 MSDN 文章描述了使用經典 .Net 框架的捲影複製,這正是我所需要的。但是 .Net Core 中缺少整個 AppDomain 的東西。
所以我的問題是:
- .Net Core 中是否有另一種方法可以啟用影子復製程序集?
- .Net Core 中是否還有其他機制允許建構自更新應用程序?
由於 .NET Core 中沒有內置機制來執行此操作,因此我最終實現了自己的自定義解決方案。它的工作原理大致如下:
- 正在執行的應用程序下載新的二進製文件並將其解壓縮到新文件夾中。
- 正在執行的應用程序啟動一個小的更新程序程序。以下參數通過命令行傳遞給更新程序程序:
- 正在執行的應用程序的程序 ID
- 正在執行的應用程序的二進制路徑
- 下載的二進製文件的路徑
- 正在執行的應用程序自行退出。
- 更新程序會一直等待,直到正在執行的應用程序退出(使用程序 ID),或者如果它在給定的超時時間內沒有自行退出,則強制終止正在執行的應用程序。
- 更新程序程序刪除現有的二進製文件並複制新下載的二進製文件。
- 更新程序啟動主應用程序的新版本。
確保您在主應用程序中盡可能多地進行操作(下載、解包、驗證等),並使更新程序過程盡可能簡單(將失敗的風險降至最低)。
這種方法已被證明是相當穩定的。