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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

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…

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

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…

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

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

遥控器原理的分页

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

.NET Core剪裁器升级瘦身引擎,并支持剪裁计划的录制和回放

上周&#xff0c;我发布了对.NET Core程序进行瘦身的开源软件Zack.DotNetTrimmer&#xff0c;与.NET Core内置的剪裁器相比&#xff0c;Zack.DotNetTrimmer不仅对程序的剪裁效果更好&#xff0c;而且还支持WPF、WinForm程序。下面是Zack.DotNetTrimmer与.NET内置的剪裁器的对比…

python 查看当前目录_Python的武器库11:os模块

说到编程语言python&#xff0c;有一个著名的格言"余生太短&#xff0c;只用python"。如果要分析为什么会存在这么一句格言&#xff1f;python的语法并不简单&#xff0c;有复杂难懂的部分&#xff0c;之所以又这样一句格言&#xff0c;是因为python中有很多强大的模…

ASP.NET Core 实现自定义认证

前言在 ASP.NET Core 中&#xff0c;我们常使用基于 JWT 的认证&#xff1a;services.AddAuthentication(option > {option.DefaultAuthenticateScheme JwtBearerDefaults.AuthenticationScheme;option.DefaultChallengeScheme JwtBearerDefaults.AuthenticationScheme;})…

图像处理工具类

为什么80%的码农都做不了架构师&#xff1f;>>> package net.kitbox.util;import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rende…

点击按钮,图片和按钮的文字发生改变

点击“隐藏”按钮&#xff0c;下方的图片隐藏&#xff0c;并且按钮上的文字由“隐藏”变为“显示”。再次点击&#xff0c;图片显示并且位子再次由“显示”变为“隐藏” 直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta c…

mysql安装10045_mysql数据库5.6.45安装后的配置(离线安装包版)

二、windows10下的配置(1) 环境变量配置打开控制面板>系统和安全>系统>高级系统设置,选择环境变量,在系统变量中找到path,编辑该选项。第一行是oracle数据库的环境变量path配置&#xff0c;上图中最后一行是jdk的安装路径path配置。我们要添加mysql安装路径path配置。…

mysql 未找到命令_MySQL主从复制配置说明,一文教你搞懂数据库主从复制

一&#xff0c;MySQL主从配置原理1. mysql支持的复制格式基于语句复制(STATEMENT)&#xff08;优点&#xff09;基于statement复制的优点很明显&#xff0c;简单的记录执行语句同步到从库执行同样的语句&#xff0c;占用磁盘空间小&#xff0c;网络传输快&#xff0c;并且通过m…

.NET 5.0即将不再提供服务更新,请升级到.NET 6.0

5 月 8 日更新之后&#xff0c;微软将不再为 .NET 5.0 提供服务更新&#xff0c;包括安全修复或技术支持&#xff0c;用户需要将 .NET 版本更新到受支持的版本 (.NET 6.0 ) 才能继续接收更新。.NET 5.0 不是 LTS 版本&#xff0c;因此将在发布 18 个月或下一个版本发布后的 6 个…

关于PHP默认Expires: Thu, 19 Nov 1981...的故事

为何PHP不设置Expires头的时候, 默认输出如下的缓存头呢&#xff1f;: Expires: Thu, 19 Nov 1981 08:52:00 GMT 答案来自stackoverflow : Its an attempt to disable caching. 这是用于尝试禁用浏览器缓存PHP请求的 The date is the birthday of the developer Sascha Schuman…

认识与入门:Markdown

原文&#xff1a;http://www.jianshu.com/p/22ba695a7ce3 Markdown 是一种轻量级的「标记语言」&#xff0c;它的优点很多&#xff0c;目前也被越来越多的写作爱好者&#xff0c;撰稿者广泛使用。看到这里请不要被「标记」、「语言」所迷惑&#xff0c;Markdown 的语法十分简单…

游戏开发Camera之Cinematic Camera-深度

人的视觉系统是二维的&#xff0c;它通过生理和心理的暗示来感知图像的深度&#xff0c;在现实世界中视觉系统会自动用深度线索depth cue来确定对象之间的距离游戏画面也是二维的&#xff0c;用x&#xff0c;y轴来定义&#xff0c;画面深度用z轴来定义&#xff0c;可以通过创造…