GeneralUpdate20220323里程碑版本发布
大家好我是juster,GeneralUpdate的开源项目作者。这次将发布GeneralUpdate里程碑版本,该版本发生了巨大改变历时4个月的时间终于要和大家见面了。开源不易希望大家能多多支持。可能或多或少会有些bug希望大家多多反馈,这里也有一个小小的心愿希望这个开源项目能上1000star,拜托各位小伙伴了。
github:https://github.com/WELL-E/AutoUpdater
gitee:https://gitee.com/Juster-zhu/GeneralUpdate
在线帮助文档:http://justerzhu.cn/ (后续将会按组件拆分成对应的文档)
Nuget版本管理参考标准:https://docs.microsoft.com/zh-cn/nuget/concepts/package-versioning
应用程序集版本管理参考标准:https://docs.microsoft.com/zh-cn/dotnet/standard/assembly/versioning (被组件更新的客户端程序,说通俗点就是你公司的产品;组件的操作将按照这个标准执行。)
本次版本发布会有很多改变,不是平滑升级(追求稳定或不想改动慎用)。本项目正在逐渐稳定后续将会平滑升级避免开发者再度修改。
如果发生“乌龙事件” 例如:发布更新包内容自身错误或更新过程中发生意外,不可回滚。目前解决方案(1)重新请求更新,(2)通过推送机制发送紧急修复版本更新包;来解决此类问题。
关于“不可回滚”这个问题,如果有更好的办法希望各位可以直接在issues中提出您的看法;目前社区中有两种声音(1)出现意外情况希望组件可以将本地程序回滚至原来的版本,保证哪怕更新失败也要用户可用。(2)更新组件的意义就是将组件推向新的版本让本次的版本发布有效,如果更新失败那么让它更新成功为止;只许前进不许退。
GeneralUpdate力致于支持多操作系统、多UI框架、多.NET框架版本达到“通用更新”。本开源项目有企业生产环境落地的实践作为支撑,并由本人及社区在持续做新特性的迭代、维护管理。接下来的内容相信大家都会感兴趣,我想到了很多有意思的想法这里会逐个分享给大家。
1.开发历程
本次发布版本是从2022年1月1日开始,重构、设计、开发、修复、编写文档GeneralUpdate到2022年3月22日。在这将近4个月的时间里几乎所有的休息时间都在做开源;有时候写到凌晨躺在床上因为写代码导致的大脑兴奋一直睡不着长期的睡眠不足导致凝血功能失常,依旧在项目中对迭代、设计和社区建议中做出努力。非常感谢社区的小伙伴的支持、建议和帮助,这里再次向.net社区发起招募希望可以有更多的小伙伴加入到开源中来。依旧保持之前所说的奖励机制(https://mp.weixin.qq.com/s/jP4T_M1pqpZ49g7cSs2rnw)或根据贡献难度分配给参加开源的开发者们。
补充:需提交功能性、重要修改PR(“蜻蜓点水”的PR不算在奖励分配的考虑范围内)、重要平台调研或测试工作。
特别感谢@Weihan Li 、@lindexi 、 @walterlv 以及@github参考的开源项目作者们(参考代码均为MIT协议不会发生其它协议混淆造成“代码感染”),在此期间的技术解答和参考的技术文章、代码。如果没有社区的小伙伴的支持GeneralUpdate将会很难进步。
2.开源建设
我的目前的想法如下,不知道合不合适。如果有任何想沟通交流的可以邮件联系我zhuzhen723723@outlook.com
(1)捐赠10元,提供使用解答,在线文档。
(2)捐赠100元,提供最新版本的GeneralUpdate简易设计文档、使用教学视频(文档将以邮件的方式发送至捐赠者的邮箱中)。
(3)捐赠1000元,提供针对本组件的技术支持。
需要特别说明的是,在使用开源项目的过程中遇到的问题希望在github或gitee上提交issue或PR以方便大家在网络上搜索问题及解决方案,请勿单独私聊(在平台上提交issue或PR我这里都是有邮件通知的会第一时间进行回复和解答)。
所有的文档及视频教程将在版本发布后陆续补充(发布之日起一个自然月内补齐)。
以上所有的捐款将会透明公开、并用于开源项目的建设中。所有的捐赠者提供捐赠截图和个人邮箱(不公开)登记记录,并会在GeneralUpdate的readme.md中记录在捐赠墙上。另外会将提交PR的开发者记录在readme.md中记录在贡献墙。
捐赠通道目前考虑的是集中在gitee的捐赠功能当中,这样捐献的资金大家都看到见。(https://gitee.com/Juster-zhu/GeneralUpdate)
*这里,特别说明一下为什么会制定这样的捐赠规则。
GeneralUpdate项目是基于MIT(https://baike.baidu.com/item/MIT%E8%AE%B8%E5%8F%AF%E8%AF%81/6671281)协议开放的不会收取使用者(企业、个人)的任何费用;
在开源社区中所有的开源工作者都需要支持和鼓励,为保持开源项目的持续进行和避免没有其他开发者愿意参与开源。
有了社区的捐赠会带来更多的开发者加入到开源回馈给社区更好用的开源项目,这样的一个良性循环改善.NET开源社区的环境。(捐赠并非购买版权或服务,纯属捐赠者认可和支持)
有钱的捧个钱场,没钱的捧个star。并向各位致以最大的敬意。
3.发布内容
这里先看看发布的版本号以及这次大版本的更新发生了哪些改动(共8个部分)。
组件名称 | 版本号(old) | 版本号(new) | 状态 |
---|---|---|---|
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 和更新程序名称即可,简化了开发者需要关心的参数组件内自动获取。
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的版本。开发者可以在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 发生了修改产生了新版本的文件,那么将会把temp.dll的新版本文件和老版本文件做一个差分。最后生成一个.patch的补丁文件,按照正常项目迭代那么这个.patch的补丁将会是kb级的。再配合7z的高压缩将更新包的大小做到目前状态下的极致节省流量和带宽占用。特别需要说明的是,如果在新版本中添加了新文件还是会将新增文件原封不动的打包到更新包中。
【4】组件[NEW]GeneralUpdate.Differential
在GeneralUpdate中新增组件Differential,该组件主要提供以下功能:
(1)[NEW] 新增二进制差分更新,生成.patch补丁文件。
(2)[NEW] 新增增量更新,例如:version 1.1.1.1原有10个文件这次版本发布修改了其中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 耦合,发现目前版本并不需要。
【7】组件GeneralUpdate.Single
本次未更新实际功能。
【8】测试用例 Example
为简化开发者在验证、测试过程中编写用例开发工作。在GeneralUpdate解决方案中添加了以下测试用例:
AutoUpdate.ClientCore
AutoUpdate.Core
AutoUpdate.MD5
AutoUpdate.Differential
AutoUpdate.ZIP
AutoUpdate.MinimalService
AutoUpdate.Test
以上组件将会同步到github、gitee、nuget平台,欢迎大家转发、关注、支持、打赏。GeneralUpdate最新动态将优先在本公众号发布,关于本次发布分享到这里,感谢各位的阅读。
GeneralUpdate20220323里程碑版本发布的更多相关文章
- Sentinel 发布里程碑版本,添加集群流控功能
自去年10月底发布GA版本后,Sentinel在近期发布了另一个里程碑版本v1.4(最新的版本号是v1.4.1),加入了开发者关注的集群流控功能. 集群流控简介 为什么要使用集群流控呢?假设我们希望给 ...
- Spring Boot 3.0.0 发布第一个里程碑版本M1,你的 Java 升到17 了吗?
2022年1月20日,Spring官方发布了Spring Boot 3.0.0的第一个里程碑版本M1. 下面一起来来看看Spring Boot 3.0.0 M1版本都有哪些重大变化: Java基线从 ...
- 历时2月,动态线程池 DynamicTp 发布里程碑版本 V1.0.8
关于 DynamicTp DynamicTp 是一个基于配置中心实现的轻量级动态线程池管理工具,主要功能可以总结为动态调参.通知报警.运行监控.三方包线程池管理等几大类. 经过多个版本迭代,目前最新版 ...
- EQueue 2.3.2版本发布(支持高可用)
前言 前段时间针对EQueue的完善终于告一段落了,实在值得庆祝,自己的付出和坚持总算有了成果.这次新版本主要为EQueue实现了集群功能,基本实现了Broker的高可用.另外还增加了很多实用的功能, ...
- glibc 各版本发布时间以及内核默认glibc版本
最近有些软件要求glibc 2.14+,centos 6.x自带的版本是2.12的,特查了下glibc 各版本发布时间以及与对应的内核,如下: Complete glibc release histo ...
- 比Ansible更吊的自动化运维工具,自动化统一安装部署自动化部署udeploy 1.0 版本发布
新增功能: 逻辑与业务分离,完美实现逻辑与业务分离,业务实现统一shell脚本开发,由框架统一调用. 并发多线程部署,不管多少台服务器,多少个服务,同时发起线程进行更新.部署.启动. 提高list规则 ...
- 评论alpha版本发布
讲解顺序: 1. 新蜂:俄罗斯方块 俄罗斯方块已经完成了核心的游戏部分,可以流畅的进行游戏,经验值功能也已经完成,目前进度很好:不足之处主要有:后续的显示内容还没完成,所以界面空出来很多板块,alp ...
- Percona Server 5.6.13-61.0 首个 GA 版本发布
Percona Server 5.6 的首个 GA 版本发布了,版本号是 5.6.13-61.0 ,该版本基于 MySQL 5.6.13 改进内容包括: New Features: Percona S ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布
(新年巨献) RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布 历时数月,RDIFramework.NET V2.8版本发布了,感谢大家的支持. RDIFram ...
随机推荐
- [TJOI2013] 奖学金
代码: #include<bits/stdc++.h> using namespace std; long long n,c,ff,ans; long long suma[200010], ...
- 关于基于GDAL库QT软件平台下C++语言开发使用说明
背景前提 地理空间数据抽象库(GDAL)是一个用于读取和编写栅格和矢量地理空间数据格式的计算机软件库,由开源地理空间基金会在许可的X / MIT风格免费软件许可下发布. 作为一个库,它为调用应用程序提 ...
- [LeetCode]21.合并两个有序链表(Java)
原题地址: merge-two-sorted-lists 题目描述: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例 1: 输入:l1 = [1 ...
- 《深度探索C++对象模型》第一章 | 关于对象
C++对象模式 非静态数据成员放置在每个类对象内,静态数据成员则被放置在所有类对象之外.静态和非静态的成员函数也被放置在所有类对象之外.每个类产生一堆指向虚函数的指针,放在虚表(vtbl)中.每个类对 ...
- Oracle数据库-常规中行显示0,解决方案
如图,如果当前位置显示为0 原因:Oracle不是实时的对表进行分析的,需要手动执行分析. 解决方案: 分析表 analyze table tablename compute statistics;
- HBase学习记录-API
delete.addColumns()和delete.addColumn()的区别 /** * delete.addColumns(); * delete.addColumn(); * 区别: * a ...
- [Java]Thinking in Java 练习2.12
题目 对HelloDate.java的简单注释文档的示例执行javadoc,然后通过Web浏览器查看结果. 代码 1 //: HW/Ex2_2.java 2 import java.util.*; 3 ...
- 如何在Excel里安装excel插件?
随着科技的发展,人们对数据分析的要求越来越多, Excel也存在一些问题,长期困扰一线业务用户:首先是性能问题.对于大数据量,Excel处理起来很慢.数据获取的过程麻烦,特别是周期性的数据获取,每次都 ...
- 十大经典排序算法(java实现、配图解,附源码)
前言: 本文章主要是讲解我个人在学习Java开发环境的排序算法时做的一些准备,以及个人的心得体会,汇集成本篇文章,作为自己对排序算法理解的总结与笔记. 内容主要是关于十大经典排序算法的简介.原理.动静 ...
- Python:取整函数、四舍五入
int(a) 绝对值向0方向取整,符号不变 math.ceil(a) 向正无穷取整 math.floor(a) 向负无穷取整 round(a,n=0) 四舍五入,第二个参数说明保留小数位数