大家好我是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的版本。

  1. var builder = WebApplication.CreateBuilder(args);
  2. builder.Services.AddSingleton<IUpdateService, GeneralUpdateService>();
  3. builder.Services.AddSignalR();
  4. var app = builder.Build();
  5. app.MapHub<VersionHub>("/versionhub");
  6. app.Use(async (context, next) =>
  7. {
  8.    var hubContext = context.RequestServices.GetRequiredService<IHubContext<VersionHub>>();
  9.    await CommonHubContextMethod((IHubContext)hubContext);
  10.    if (next != null)
  11.   {
  12.        await next.Invoke();
  13.   }
  14. });
  15. async Task CommonHubContextMethod(IHubContext context)
  16. {
  17.    await context.Clients.All.SendAsync("clientMethod", "");
  18. }

【2】组件GeneralUpdate.ClientCore

(1)[NEW] 在GeneralClientBootstrap中重载了配置方式,该方法简化为只需要传递远程服务器地址例如http://127.0.0.1 和更新程序名称即可,简化了开发者需要关心的参数组件内自动获取。

  1. public GeneralClientBootstrap Config(string url, string appName = "AutoUpdate.Core");

(2)[NEW] 添加了最新版本接收推送功能,VersionHub对象。主要解决临时需要接收紧急修复重大bug的版本,可以在GetMessage回调函数中可添加更新操作。

  1. 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回调函数中可添加更新操作。

  1. 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)中包含内容:

  1. {
  2.   "ip":"123456789",
  3.   "port":9999
  4. }

服务端新的配置文件结构为:

  1. {
  2.   "ip":"0",
  3.   "port":0,
  4.   "path":"c://"
  5. }

那么将会把,“path”字段更新到客户端本地配置文件中并保留原有内容为:

  1. {
  2.   "ip":"123456789",
  3.   "port":9999,
  4.   "path":"c://"
  5. }

【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里程碑版本发布的更多相关文章

  1. Sentinel 发布里程碑版本,添加集群流控功能

    自去年10月底发布GA版本后,Sentinel在近期发布了另一个里程碑版本v1.4(最新的版本号是v1.4.1),加入了开发者关注的集群流控功能. 集群流控简介 为什么要使用集群流控呢?假设我们希望给 ...

  2. 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基线从 ...

  3. 历时2月,动态线程池 DynamicTp 发布里程碑版本 V1.0.8

    关于 DynamicTp DynamicTp 是一个基于配置中心实现的轻量级动态线程池管理工具,主要功能可以总结为动态调参.通知报警.运行监控.三方包线程池管理等几大类. 经过多个版本迭代,目前最新版 ...

  4. EQueue 2.3.2版本发布(支持高可用)

    前言 前段时间针对EQueue的完善终于告一段落了,实在值得庆祝,自己的付出和坚持总算有了成果.这次新版本主要为EQueue实现了集群功能,基本实现了Broker的高可用.另外还增加了很多实用的功能, ...

  5. glibc 各版本发布时间以及内核默认glibc版本

    最近有些软件要求glibc 2.14+,centos 6.x自带的版本是2.12的,特查了下glibc 各版本发布时间以及与对应的内核,如下: Complete glibc release histo ...

  6. 比Ansible更吊的自动化运维工具,自动化统一安装部署自动化部署udeploy 1.0 版本发布

    新增功能: 逻辑与业务分离,完美实现逻辑与业务分离,业务实现统一shell脚本开发,由框架统一调用. 并发多线程部署,不管多少台服务器,多少个服务,同时发起线程进行更新.部署.启动. 提高list规则 ...

  7. 评论alpha版本发布

    讲解顺序: 1.  新蜂:俄罗斯方块 俄罗斯方块已经完成了核心的游戏部分,可以流畅的进行游戏,经验值功能也已经完成,目前进度很好:不足之处主要有:后续的显示内容还没完成,所以界面空出来很多板块,alp ...

  8. 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 ...

  9. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布

    (新年巨献) RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布 历时数月,RDIFramework.NET V2.8版本发布了,感谢大家的支持. RDIFram ...

随机推荐

  1. Solution -「洛谷 P4320」道路相遇

    \(\mathcal{Description}\)   Link.   给定一个 \(n\) 个点 \(m\) 条边的连通无向图,并给出 \(q\) 个点对 \((u,v)\),询问 \(u\) 到 ...

  2. verification 时间不推进,挂起

    时间不推进,挂起 0时刻 windows-> new -> source Browser 可能是仿真精度不够,比如进度是1ns,但是时钟有0.1ns为周期的,这种情况下,仿真器会吧这个周期 ...

  3. Spring Boot数据访问之动态数据源切换之使用注解式AOP优化

    在Spring Boot数据访问之多数据源配置及数据源动态切换 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详述了如何配置多数据源及多数据源之间的动态切换.但是需要读数据库的地方,就 ...

  4. Vue.js——学习笔记

    Vue-自学笔记 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅 ...

  5. Java不支持协程?那是你不知道Quasar!

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 在编程语言的这个圈子里,各种语言之间的对比似乎就一直就没有停过,像什么古早时期的"PHP是世界上最好的语言"就不提了,最近我 ...

  6. 利用iptables做网络转发

    常见的网络拓扑图结构如下: 但是内网服务器偶尔有上网需求,比如yum工具,wget文件.而我们又不能让重要业务直接暴露在公网上. 好用的安全策略有:三层交换机.路由器做nat映射,防火墙做安全策略. ...

  7. 微服务从代码到k8s部署应有尽有系列(八、各种队列)

    我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...

  8. NSSCTF-[UTCTF 2020]Zero

    做misc嘛,先把题目一开始就给的一串英文翻译一下, 可以看到说明的是这个txt文档可能是包含其他的文本量,这个文本里面还有其他的东西,只是正常是看不到, 使用binwalk或者fomost分离尝试, ...

  9. virtualenv 创建隔离工作环境

    在开发 Python 应用程序的时候,每个项目所需要的python版本和各种包依赖都可能不完全一样,我们当然希望当前运行环境只包含对当前项目有用的包依赖,以保证运行环境的干净.virtualenv就是 ...

  10. RFC2544丢包率测试——信而泰网络测试仪实操

    文章关键词:RFC2544.丢包率.吞吐量. 丢包率概述: 丢包率(Frame Loss Rate)测试的目的是确定DUT在不同的负载和帧长度条件下的丢包率.在稳定负载下,由于网络设备资源缺乏,应该正 ...