GeneralUpdate20220323里程碑版本发布
大家好我是juster,GeneralUpdate的開源項目作者。這次將發(fā)布GeneralUpdate里程碑版本,該版本發(fā)生了巨大改變歷時4個月的時間終于要和大家見面了。開源不易希望大家能多多支持。可能或多或少會有些bug希望大家多多反饋,這里也有一個小小的心愿希望這個開源項目能上1000star,拜托各位小伙伴了。
github:https://github.com/WELL-E/AutoUpdater
gitee:https://gitee.com/Juster-zhu/GeneralUpdate
在線幫助文檔:http://justerzhu.cn/ ?(后續(xù)將會按組件拆分成對應的文檔)
Nuget版本管理參考標準:https://docs.microsoft.com/zh-cn/nuget/concepts/package-versioning
應用程序集版本管理參考標準:https://docs.microsoft.com/zh-cn/dotnet/standard/assembly/versioning (被組件更新的客戶端程序,說通俗點就是你公司的產品;組件的操作將按照這個標準執(zhí)行。)
本次版本發(fā)布會有很多改變,不是平滑升級(追求穩(wěn)定或不想改動慎用)。本項目正在逐漸穩(wěn)定后續(xù)將會平滑升級避免開發(fā)者再度修改。
如果發(fā)生“烏龍事件” 例如:發(fā)布更新包內容自身錯誤或更新過程中發(fā)生意外,不可回滾。目前解決方案(1)重新請求更新,(2)通過推送機制發(fā)送緊急修復版本更新包;來解決此類問題。
關于“不可回滾”這個問題,如果有更好的辦法希望各位可以直接在issues中提出您的看法;目前社區(qū)中有兩種聲音(1)出現意外情況希望組件可以將本地程序回滾至原來的版本,保證哪怕更新失敗也要用戶可用。(2)更新組件的意義就是將組件推向新的版本讓本次的版本發(fā)布有效,如果更新失敗那么讓它更新成功為止;只許前進不許退。
GeneralUpdate力致于支持多操作系統(tǒng)、多UI框架、多.NET框架版本達到“通用更新”。本開源項目有企業(yè)生產環(huán)境落地的實踐作為支撐,并由本人及社區(qū)在持續(xù)做新特性的迭代、維護管理。接下來的內容相信大家都會感興趣,我想到了很多有意思的想法這里會逐個分享給大家。
1.開發(fā)歷程
本次發(fā)布版本是從2022年1月1日開始,重構、設計、開發(fā)、修復、編寫文檔GeneralUpdate到2022年3月22日。在這將近4個月的時間里幾乎所有的休息時間都在做開源;有時候寫到凌晨躺在床上因為寫代碼導致的大腦興奮一直睡不著長期的睡眠不足導致凝血功能失常,依舊在項目中對迭代、設計和社區(qū)建議中做出努力。非常感謝社區(qū)的小伙伴的支持、建議和幫助,這里再次向.net社區(qū)發(fā)起招募希望可以有更多的小伙伴加入到開源中來。依舊保持之前所說的獎勵機制(https://mp.weixin.qq.com/s/jP4T_M1pqpZ49g7cSs2rnw)或根據貢獻難度分配給參加開源的開發(fā)者們。
補充:需提交功能性、重要修改PR(“蜻蜓點水”的PR不算在獎勵分配的考慮范圍內)、重要平臺調研或測試工作。
特別感謝@Weihan Li 、@lindexi 、 @walterlv 以及@github參考的開源項目作者們(參考代碼均為MIT協(xié)議不會發(fā)生其它協(xié)議混淆造成“代碼感染”),在此期間的技術解答和參考的技術文章、代碼。如果沒有社區(qū)的小伙伴的支持GeneralUpdate將會很難進步。
2.開源建設
我的目前的想法如下,不知道合不合適。如果有任何想溝通交流的可以郵件聯系我zhuzhen723723@outlook.com
(1)捐贈10元,提供使用解答,在線文檔。
(2)捐贈100元,提供最新版本的GeneralUpdate簡易設計文檔、使用教學視頻(文檔將以郵件的方式發(fā)送至捐贈者的郵箱中)。
(3)捐贈1000元,提供針對本組件的技術支持。
需要特別說明的是,在使用開源項目的過程中遇到的問題希望在github或gitee上提交issue或PR以方便大家在網絡上搜索問題及解決方案,請勿單獨私聊(在平臺上提交issue或PR我這里都是有郵件通知的會第一時間進行回復和解答)。
所有的文檔及視頻教程將在版本發(fā)布后陸續(xù)補充(發(fā)布之日起一個自然月內補齊)。
以上所有的捐款將會透明公開、并用于開源項目的建設中。所有的捐贈者提供捐贈截圖和個人郵箱(不公開)登記記錄,并會在GeneralUpdate的readme.md中記錄在捐贈墻上。另外會將提交PR的開發(fā)者記錄在readme.md中記錄在貢獻墻。
捐贈通道目前考慮的是集中在gitee的捐贈功能當中,這樣捐獻的資金大家都看到見。(https://gitee.com/Juster-zhu/GeneralUpdate)
*這里,特別說明一下為什么會制定這樣的捐贈規(guī)則。
GeneralUpdate項目是基于MIT(https://baike.baidu.com/item/MIT%E8%AE%B8%E5%8F%AF%E8%AF%81/6671281)協(xié)議開放的不會收取使用者(企業(yè)、個人)的任何費用;
在開源社區(qū)中所有的開源工作者都需要支持和鼓勵,為保持開源項目的持續(xù)進行和避免沒有其他開發(fā)者愿意參與開源。
有了社區(qū)的捐贈會帶來更多的開發(fā)者加入到開源回饋給社區(qū)更好用的開源項目,這樣的一個良性循環(huán)改善.NET開源社區(qū)的環(huán)境。(捐贈并非購買版權或服務,純屬捐贈者認可和支持)
有錢的捧個錢場,沒錢的捧個star。并向各位致以最大的敬意。
3.發(fā)布內容
這里先看看發(fā)布的版本號以及這次大版本的更新發(fā)生了哪些改動(共8個部分)。
| GeneralUpdate.AspNetCore | 1.0.0 | 1.1.0 | 正常 |
| GeneralUpdate.ClientCore | 1.1.2 | 2.3.6 | 正常 |
| GeneralUpdate.Core | 3.6.10 | 4.10.12 | 正常 |
| GeneralUpdate.Differential | - | 1.0.0 | 正常 |
| GeneralUpdate.Common | 1.0.0 | - | 移除 |
【1】組件GeneralUpdate.AspNetCore
(1)[NEW] 添加了最新版本推送功能,VersionHub對象。主要解決臨時需要推送緊急修復重大bug的版本。
var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton<IUpdateService, GeneralUpdateService>(); builder.Services.AddSignalR(); var app = builder.Build();app.MapHub<VersionHub>("/versionhub");app.Use(async (context, next) => {var hubContext = context.RequestServices.GetRequiredService<IHubContext<VersionHub>>();await CommonHubContextMethod((IHubContext)hubContext);if (next != null){await next.Invoke();} });async Task CommonHubContextMethod(IHubContext context) {await context.Clients.All.SendAsync("clientMethod", ""); }【2】組件GeneralUpdate.ClientCore
(1)[NEW] 在GeneralClientBootstrap中重載了配置方式,該方法簡化為只需要傳遞遠程服務器地址例如http://127.0.0.1 和更新程序名稱即可,簡化了開發(fā)者需要關心的參數組件內自動獲取。
public GeneralClientBootstrap Config(string url, string appName = "AutoUpdate.Core");(2)[NEW] 添加了最新版本接收推送功能,VersionHub對象。主要解決臨時需要接收緊急修復重大bug的版本,可以在GetMessage回調函數中可添加更新操作。
VersionHub<string>.Instance.Subscribe($"{ baseUrl }/{ hubName }", "TESTNAME", new Action<string>(GetMessage));【3】組件GeneralUpdate.Core
(1)[FIX] 修復下載中途斷網,到達超時時間沒有異常上拋問題。
(2)[REFACTOR] 重構多任務下載設計。
(3)[FIX] 修復FileUtil.Update32Or64Libs在某些情況下會拋出異常。
(4)[REFACTOR] 重構默認更新策略設計。
(5)[NEW] 添加了最新版本接收推送功能,VersionHub對象。主要解決臨時需要接收緊急修復重大bug的版本。開發(fā)者可以在GetMessage回調函數中可添加更新操作。
VersionHub<string>.Instance.Subscribe($"{ baseUrl }/{ hubName }", "TESTNAME", new Action<string>(GetMessage));(6)[NEW] 支持7z壓縮包的解壓功能。
(7)[REMOVE] 移除了GeneralUpdate.Core與GeneralUpdate.ClientCore 中重復代碼,通用代碼通過鏈接文件解決冗余問題。
(8)[NEW] 支持增量更新功能,例如:只更新了一個文件,那么就只將該文件打包。
(9)[NEW] 支持二進制差分功能,例如:temp.dll 發(fā)生了修改產生了新版本的文件,那么將會把temp.dll的新版本文件和老版本文件做一個差分。最后生成一個.patch的補丁文件,按照正常項目迭代那么這個.patch的補丁將會是kb級的。再配合7z的高壓縮將更新包的大小做到目前狀態(tài)下的極致節(jié)省流量和帶寬占用。特別需要說明的是,如果在新版本中添加了新文件還是會將新增文件原封不動的打包到更新包中。
【4】組件[NEW]GeneralUpdate.Differential
在GeneralUpdate中新增組件Differential,該組件主要提供以下功能:
(1)[NEW] 新增二進制差分更新,生成.patch補丁文件。
(2)[NEW] 新增增量更新,例如:version 1.1.1.1原有10個文件這次版本發(fā)布修改了其中3個文件那么只會將修改的文件進行打包。
(3)[NEW] 更新配置文件(目前只支持.json配置文件且內容深度為1級),例如:客戶端程序使用.json格式文件作為配置文件,那么將會保留客戶端原有配置內容的前提下更新配置文件內容。假設客戶端原有配置文件(.json)中包含內容:
{"ip":"123456789","port":9999 }服務端新的配置文件結構為:
{"ip":"0","port":0,"path":"c://" }那么將會把,“path”字段更新到客戶端本地配置文件中并保留原有內容為:
{"ip":"123456789","port":9999,"path":"c://" }【5】組件GeneralUpdate.Zip
(1)[REFACTOR] 重構壓縮組件設計,將支持.zip和.7z壓縮包格式。
(2)[NEW] 添加7z解壓功能。
【6】組件[REMOVE]GeneralUpdate.Common
(1)移除該組件,解除GeneralUpdate.Core與GeneralUpdate.ClientCore 耦合,發(fā)現目前版本并不需要。
【7】組件GeneralUpdate.Single
本次未更新實際功能。
【8】測試用例 Example
為簡化開發(fā)者在驗證、測試過程中編寫用例開發(fā)工作。在GeneralUpdate解決方案中添加了以下測試用例:
AutoUpdate.ClientCore
AutoUpdate.Core
AutoUpdate.MD5
AutoUpdate.Differential
AutoUpdate.ZIP
AutoUpdate.MinimalService
AutoUpdate.Test
以上組件將會同步到github、gitee、nuget平臺,歡迎大家轉發(fā)、關注、支持、打賞。GeneralUpdate最新動態(tài)將優(yōu)先在本公眾號發(fā)布,關于本次發(fā)布分享到這里,感謝各位的閱讀。
總結
以上是生活随笔為你收集整理的GeneralUpdate20220323里程碑版本发布的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET6中关于Minimal API的
- 下一篇: .NET 产品组问卷调查|和我们分享你的