1:下載、開源、使用教程
下載地址:Github 下載 、其它下載
開源地址:https://github.com/cyq1162/AspNetCoreUpdater
使用教程:
解壓AspNetCoreUpdater.rar,得到兩個壓縮包,分別對應用Window和Linux,

A、使用教程:For Window IIS
1、解壓AspNetCoreUpdaterForWindow,得到一個執行檔案和一個組態檔,

2、打開AspNetCoreUpdaterForWindow.ini,根據提示,修改對應的引數,

把對應要升級的dll或其它檔案都放到update.zip包里,并移到發布目錄下,
3、把軟體移到發布的工具目錄下,直接運行AspNetCoreUpdater.exe即可,運行程序如下圖:

B、使用教程:For Linux Nginx
1、解壓AspNetCoreUpdaterForLinux,得到一個dll和2個組態檔,

2、打開AspNetCoreUpdaterForLinux.ini,根據提示,修改對應的引數,

把對應要升級的dll或其它檔案都放到update.zip包里,并移到發布目錄下,
并將修改后的nginx.conf也放一份到update.zip包里,
3、把軟體移到發布的工具目錄下,命令cd到目錄后,運行dotnet AspNetCoreUpdater.dll 即可,運行程序如下圖:

2、AspNetCore熱更新解決方案產出的程序
1、熱更新定義:
當然是指更新dll等新應用程式后,啟動新的程式接收新的請求,并保持原有的程式處理舊的請求,直到舊的請求處理完后,結束舊的應用程式的程序,
任何其它非以上解釋的程式升級程序,都明顯有點冷,
2、產出程序:
對于熱更新,在AspNetCore之前,IIS一直處理的很好,以至于我們根本不需要思考這個問題,
直到我寫了關于AspNetCore的文章開始后,關于Linux下如何進行熱更新,開始有過簡單的思考,不過不是實際應用,就沒進一步,
直到最新的專案,建的AspNetCore應用程式, 并發布到本地IIS,在內網進行API測驗時,一個基本的問題出現了:
我需要喊1聲,大伙結束請求10秒鐘,然后手工快速結束w3wp行程,然后點發布按鈕,
開發程序,內部還能喊一聲,但這樣的升級明顯是不科學,于是乎就上了一頓的搜索關于“NETCore 熱更新”,結果,失望啊,
于是乎,我添加了一個.net framwork的解決方案,代碼還是同一份,用不同的解決方案可以發布不同的版本,
PS:用過我框架的人都知道,開發方式和代碼從來都是不需要改的,唯一的操作只要添加解決方案就可以在兩種模式中切換,
部署也拆分成了兩部分,只保持一些業務基本不動的,才用了dotnetcore部署,
這時候就一個念頭產生了:DotNetCore如果熱更新不解決,這必然會制約NetCore的大規模應用,
不是每個應用都能等到深夜再更新的;
也不是每個應用都允許隨意中斷用戶請求的;
也不是每個程式員都有實力,能找到一種分布式的繁瑣部署流程來解決升級的方法的,
就像我,搜了國內外的網,就以下幾種不靠普的方案:
1、停機維護的:app_ffline.htm檔案,
2、熱更新組態檔:IOptionsSnapshot(只是.json檔案),
3、天真的動態加載dll想法:AppDomain走不通的,
4、就一句你去看:ApplicationPartManager的 ,
發現沒有好的解決方案之后,就只能分離一些不太重要,又更新不頻繁的業務給了dotnetcore機會,
隨著專案開發階段忙碌加班的階段過去之后,終于能分出點時間來研究并解決這個問題,
經過一番研究:AspNetCore原始碼、AppDomain原始碼、和Kestrel原始碼,打算從應用程式本身搞點事件,結果路走不通....
又經過一番研究...于是乎有了本文,
3、AspNetCore 熱更新解決方案原理
對于AspNetCore應用程式來說,實作熱更新的點,不在程式本身,
因此,無需要對AspNetCore本身做什么事件,
對于Window:
其核心在于 IIS,及IIS的應用程式池的回識訓制,它能自動控制netcore程式的新舊更替,
因此,核心只要能控制IIS即可(涉及需要管理員權限),
對于Linux:
其核心在于Ngnix(或其它),其重新加載配置的程序,和IIS應用程式池的回收有相似的原理,不過它只能控制自己的新舊更替,
因些會麻煩一些,但也能解決,需要自己通過代碼控制dotnetcore專案的新啟與消亡,
對于具體怎么互動與利用及其它細節,感興趣的可以看開源的代碼,
4、總結
本來只是打算自己用,后來想一想,這么基礎的解決方案,還是開源了吧,反正我開源的專案沒十個也有七八了,不在乎多這一個了,
嗯,如果您的相關專案正在使用或打算采用我的解決方案或升級工具,麻煩給 AspNetCoreUpdater 開源的專案點個贊,謝謝,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/249267.html
標籤:.NET技术
上一篇:Bitter.Core系列六:Bitter ORM NETCORE ORM 全網最粗暴簡單易用高性能的 NETCore ORM 之 示例 DataTable 模型轉換
