GeneralUpdate20220323里程碑版本发布

e0399c62ebf6467b125d297fdd623ac2.png

大家好我是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)更新组件的意义就是将组件推向新的版本让本次的版本发布有效,如果更新失败那么让它更新成功为止;只许前进不许退。

2f3cd58eb05eff50a4c7b3c42ed3bb87.png

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)

a46cbfe94dd453b002bdc2f400d59020.png

*这里,特别说明一下为什么会制定这样的捐赠规则。

  • 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.AspNetCore1.0.01.1.0正常
GeneralUpdate.ClientCore1.1.22.3.6正常
GeneralUpdate.Core3.6.104.10.12正常
GeneralUpdate.Differential-1.0.0正常
GeneralUpdate.Common1.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最新动态将优先在本公众号发布,关于本次发布分享到这里,感谢各位的阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信息安全系统设计基础第七周学习总结

存储器的层次结构 存储技术 静态RAMSRAM将每一位存储在双稳态的存储器单元中 动态RAMDRAM将每一位存储为对电容充电。 传统的DRAMd*w的DRAM存储dw位信息 增强的DRAM 非易失性存储器 访问主存 磁盘存储 磁盘构造 磁盘容量公式&#xff1a;磁盘容量&#xff08;字节数/扇区) *…

FFmpeg的HEVC解码器源码简单分析:解码器主干部分

HEVC源码分析文章列表&#xff1a;【解码 -libavcodec HEVC 解码器】FFmpeg的HEVC解码器源码简单分析&#xff1a;概述FFmpeg的HEVC解码器源码简单分析&#xff1a;解析器&#xff08;Parser&#xff09;部分FFmpeg的HEVC解码器源码简单分析&#xff1a;解码器主干部分FFmpeg的…

C#输入姓名或者拼音码(姓名的首字母,大小写均可)进行快速模糊查找

第一步:在SQL Server中编写获取输入汉字的拼音码函数,详见SQL Server编写函数获取汉字的拼音码(首字母) 第二步:增加含有拼音码字段的人员记录 private void button_Insert_Click(object sender, EventArgs e){string NAME = textBox_name.Text.Trim();string SEX = com…

趣学算法之哥德巴赫猜想的实现

1、哥德巴赫猜想 任意大于2的偶数,都可以表示成为2个素数之和 2、代码实现 #include <iostream> #include <math.h>using namespace std;//判断是否是质数 bool isPrime(int n) {if (n < 2)return false;if (n == 2)return true;for (int i = …

.NET 产品组问卷调查|和我们分享你的 .NET 使用情况

作为一名 .NET 开发者&#xff0c;是什么让你开始学习 .NET&#xff1f;在你看来 .NET 在哪些场景下最有效&#xff1f;在平时的工作或学习中&#xff0c;你都在哪里学习 .NET 资源&#xff1f;你更希望在哪里看到更多 .NET 本地化内容&#xff1f;你觉得 .NET 的社区推动力如何…

win7 部署tomcat

1,下载 jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u3-download-1501626.html 2,下载tomcat:http://tomcat.apache.org/download-70.cgi 3,各自安装 4&#xff0c;配置环境变量&#xff1a; JAVA_HOMEC:\Program Files\Java\jdk1.7.0_03JRE_HOME C:\P…

C#+SQL Server数据库系统操作日志的实现完整案例

在开发数据库系统时,通常需要添加系统日志功能。系统日志是用来记录用户、管理员等对系统的操作记录,系统操作日志的实现方式有很多,本文基于C#和SQL Server数据库,通过设计日志记录表、编写操作记录存储过程、前端调用与展示结果等过程,实现操作日志功能完整程序设计流程…

使用机器学习算法在 .NET Core 中运行的 100% C# 开源 AI 聊天机器人平台构建器...

简介BotSharp是一个用于 AI Bot 平台构建器的开源机器学习框架。该项目涉及自然语言理解、计算机视觉和音频处理技术&#xff0c;旨在推动智能机器人助手在信息系统中的开发和应用。开箱即用的机器学习算法让普通程序员可以更快、更轻松地开发人工智能应用程序。地址https://gi…

Android之数据转化崩溃问题

1、问题和原因 程序崩溃&#xff0c;前期没有发现&#xff0c;后面发现有问题&#xff0c;是因为我写Intergr.parseInt的时候转化异常导致&#xff0c;原因是因为我写的代码分割用的常量&#xff0c;在java层写的常量&#xff0c;后续用英语版本的手机就有问题2、解决办法 确保…

win下nginx+php+mysql服务器套装_WNMP(Windows+Nginx+PHP+MySQL)安装

这篇文章介绍的内容是关于WNMP(Windows Nginx PHP MySQL) 安装&#xff0c;有着一定的参考价值&#xff0c;现在分享给大家&#xff0c;有需要的朋友可以参考一下最近在开发一个新的项目&#xff0c;环境用的是&#xff1a;Nginx1.10.3 下载地址&#xff1a; http://nginx.o…

极光推送 api ios参数问题

这是首个app项目&#xff0c;推送用的是极光推送jpush 由于用官方文档出现接收多条的问题&#xff0c;在网上找到一套封装好的&#xff0c;非常感觉这位开发者 //推送。指定人error_reporting(E_ALL^E_NOTICE);class ApipostAction{ private $_appkeys xxx; private $_mas…

Envi IDL中多元线性回归计算方法

IDL中提供了丰富的数学运算函数。其中部分函数同时提供了源码文件。例如今天介绍的Regress函数,可以在IDL控制台运行“.e regress.pro

本地开发时连接后台数据库时出现的错误,附自救方法

2019独角兽企业重金招聘Python工程师标准>>> 一、跨域问题 现状&#xff1a;后端跨域权限无法打开&#xff0c;现在的浏览器出于安全策略的限制&#xff0c;都是不允许跨域的&#xff0c;但是开发的时候经常需要一些别的域的接口&#xff0c;特别是一些接口不是自己…

Extjs 中的cookie设置

2019独角兽企业重金招聘Python工程师标准>>> 发现Extjs中有两个cookie 其一&#xff1a;设置cookie如下 saveacctisForm.getForm().findField(itemselector).getValue();Ext.util.Cookies.set(saveacct,saveacct); 取cookie中数据如下 var validStatus Ext.util.Co…

贪心算法之加勒比海盗船最优装载问题

1、问题 在北美洲东南部,有一片神秘的海域,那里碧海蓝天、阳光明媚,这正是传说中海盗最活跃的加勒比海,这里更是欧洲大陆的商旅舰队到达美洲的必经之地,所以当时的海盗活皇家舰......动非常猖獗,海盗不仅攻击过往商人,甚至攻击英国有一天,海盗们截获了一艘装满各种各样古董的货…

如何将 CSV 导入到 SqlServer 中 ?

咨询区 user3083221请问在 C# 中是否有好的方式实现将一个大的 csv 导入到 SQL Server 中&#xff0c;这个 csv 文件包含大概 30000 行&#xff0c;25 列。回答区 Kirk其实你不需要通过编程的方式&#xff0c;完全可以用 SQL Server 管理器界面 直接将 CSV 导入到 SQL Server 中…

Java设计模式----策略模式(Strategy)

1. 策略模式&#xff1a; 策略模式&#xff0c;也称为政策模式,定义如下&#xff1a; 定义一组算法&#xff0c;将每个算法都封装起来&#xff0c;使他们可以相互转化 2. 策略模式的原理是面向对象的继承和多态。策略模式的3个角色 a. Strategy 抽象策略角色 定义每个策略或算…

ENVI修复图像坏点扩展补丁

1.功能介绍 在一些影像中,由于各种原因导致了坏点的存在,主要为0值、

Devuan Jessie beta 释出

2014年&#xff0c;因为选择初始化系统systemd引发的争议&#xff0c;一群不满的开发者创建了不使用systemd的Debian分支Devuan。现在&#xff0c;Devuan开发者宣布释出Jessie beta。Debian 8 Jessie是在去年发布的&#xff0c;默认init系统systemd&#xff0c;可选使用sysvini…

遥控器原理的分页

索引&#xff1a;前几天看电视&#xff0c;使用遥控器的时候突然想到&#xff0c;我们的数据分页也可以用这种模式。于是敲出来一个类似于遥控器控制电视原理的分页。 现在详细介绍下上图中按钮的作用&#xff1a; 清除按钮&#xff1a;当按下0-9这个几个按钮时&#xff0c;如果…