开源:AspNetCore 应用程序热更新升级工具(全网第一份公开的解决方案)
1:下载、开源、使用教程
开源地址:https://github.com/cyq1162/AspNetCoreUpdater
使用教程:
解压AspNetCoreUpdater.rar,得到两个压缩包,分别对应用Window和Linux。

A、使用教程:For Window IIS
1、解压AspNetCoreUpdaterForWindow,得到一个执行文件和一个配置文件。

2、打开AspNetCoreUpdaterForWindow.ini,根据提示,修改对应的参数。

把对应要升级的dll或其它文件都放到update.zip包里,并移到发布目录下。
3、把软件移到发布的工具目录下,直接运行AspNetCoreUpdater.exe即可,运行过程如下图:

B、使用教程:For Linux Nginx
1、解压AspNetCoreUpdaterForLinux,得到一个dll和2个配置文件。

2、打开AspNetCoreUpdaterForLinux.ini,根据提示,修改对应的参数。

把对应要升级的dll或其它文件都放到update.zip包里,并移到发布目录下。
并将修改后的nginx.conf也放一份到update.zip包里。
3、把软件移到发布的工具目录下,命令cd到目录后,运行dotnet AspNetCoreUpdater.dll 即可,运行过程如下图:

2、AspNetCore热更新解决方案产出的过程
1、热更新定义:
当然是指更新dll等新应用程序后,启动新的程序接收新的请求,并保持原有的程序处理旧的请求,直到旧的请求处理完后,结束旧的应用程序的过程。
任何其它非以上解释的程序升级过程,都明显有点冷。
2、产出过程:
对于热更新,在AspNetCore之前,IIS一直处理的很好,以至于我们根本不需要思考这个问题。
直到我写了关于AspNetCore的文章开始后,关于Linux下如何进行热更新,开始有过简单的思考,不过不是实际应用,就没进一步。
直到最新的项目,建的AspNetCore应用程序, 并发布到本地IIS,在内网进行API测试时,一个基本的问题出现了:
我需要喊1声,大伙结束请求10秒钟,然后手工快速结束w3wp进程,然后点发布按钮。
开发过程,内部还能喊一声,但这样的升级明显是不科学,于是乎就上了一顿的搜索关于“NETCore 热更新”,结果,失望啊。
于是乎,我添加了一个.net framwork的解决方案,代码还是同一份,用不同的解决方案可以发布不同的版本。
PS:用过我框架的人都知道,开发方式和代码从来都是不需要改的,唯一的操作只要添加解决方案就可以在两种模式中切换。
部署也拆分成了两部分,只保持一些业务基本不动的,才用了dotnetcore部署。
这时候就一个念头产生了:DotNetCore如果热更新不解决,这必然会制约NetCore的大规模应用。
不是每个应用都能等到深夜再更新的;
也不是每个应用都允许随意中断用户请求的;
也不是每个程序员都有实力,能找到一种分布式的繁琐部署流程来解决升级的方法的。
就像我,搜了国内外的网,就以下几种不靠普的方案:
1、停机维护的:app_ffline.htm文件。
2、热更新配置文件:IOptionsSnapshot(只是.json文件)。
3、天真的动态加载dll想法:AppDomain走不通的。
4、就一句你去看:ApplicationPartManager的 。
发现没有好的解决方案之后,就只能分离一些不太重要,又更新不频繁的业务给了dotnetcore机会。
随着项目开发阶段忙碌加班的阶段过去之后,终于能分出点时间来研究并解决这个问题。
经过一番研究:AspNetCore源码、AppDomain源码、和Kestrel源码,打算从应用程序本身搞点事件,结果路走不通....
又经过一番研究...于是乎有了本文。
3、AspNetCore 热更新解决方案原理
对于AspNetCore应用程序来说,实现热更新的点,不在程序本身。
因此,无需要对AspNetCore本身做什么事件。
对于Window:
其核心在于 IIS,及IIS的应用程序池的回收机制,它能自动控制netcore程序的新旧更替。
因此,核心只要能控制IIS即可(涉及需要管理员权限)。
对于Linux:
其核心在于Ngnix(或其它),其重新加载配置的过程,和IIS应用程序池的回收有相似的原理,不过它只能控制自己的新旧更替。
因些会麻烦一些,但也能解决,需要自己通过代码控制dotnetcore项目的新启与消亡。
对于具体怎么交互与利用及其它细节,感兴趣的可以看开源的代码。
4、总结
本来只是打算自己用,后来想一想,这么基础的解决方案,还是开源了吧,反正我开源的项目没十个也有七八了,不在乎多这一个了。
嗯,如果您的相关项目正在使用或打算采用我的解决方案或升级工具,麻烦给 AspNetCoreUpdater 开源的项目点个赞,谢谢。
开源:AspNetCore 应用程序热更新升级工具(全网第一份公开的解决方案)的更多相关文章
- 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新
大家好, 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新 . 简单的说, 原理就是 类似 Asp.net 那样 让 当前 WebApp 运行在一个 A ...
- Aspnetcore下面服务器热更新与配置热加载
原文:Aspnetcore下面服务器热更新与配置热加载 Asp.net的热更新方案Appdomain在aspnetcore中不被支持了 新的方案如下: 配置文件更新选项 reloadOnChange ...
- 微信小程序热更新,小程序提示版本更新,版本迭代,强制更新,微信小程序版本迭代
相信很多人在做小程序的时候都会有迭代每当版本迭代的时候之前老版本的一些方法或者显示就不够用了这就需要用到小程序的热更新.或者说是提示升级小程序版本 editionUpdate:function(){ ...
- cocos2d-js 在线更新代码脚本 动态更新脚本程序 热更新 绕过平台审核 不需重新上架
2014年8月15日补充 cocos2d-js 3.0 rc0 的AssetsManager有缺陷,有一些注意点:(可以阅读源代码发现) 1.旧manifest中有,但新manifest中没有的文件( ...
- 关于RN热更新-iOS端捕获加载jsbundle异常解决方案
1.监听加载jsbundle异常的处理 模拟情况:合并增量后jsbundle文件出现部分错误调试发现当加载jsbundle出现异常时,RN模块RCTBatchedBridge.m中如下代码会执行: - ...
- 项目升级,为了热更新使用lua。
现在发行商的要求越来越变态,必须要求程序热更新,以应对上线后的bug及时调整,我们目标锁定在 ulua, slua,(也对L#感兴趣过),一开始对 ulua 很困惑,unity 的 assetstor ...
- Unity3D 热更新方案(集合各位专家的汇总)
http://blog.csdn.net/guofeng526/article/details/52662994 热更新”这个词,在Unity3D的应用下,是有些语义错误的,但是作为大家都熟知的一项技 ...
- ReactNative 告别CodePush,自建热更新版本升级环境
微软的CodePush热更新非常难用大家都知道,速度跟被墙了没什么区别. 另外一方面,我们不希望把代码放到别人的服务器.自己写接口更新总归感觉安全一点. so,就来自己搞个React-Native A ...
- Lua------------------unity与lua的热更新
[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新完全解读 标签: 游戏开发游戏解决方案用户体验unity3d 2014-10-18 23:23 7680人阅读 ...
随机推荐
- Panda交易所视点观察:政府连发区块链建设文件,相关概念股受追捧
日前,Panda交易所从北京市地方金融监督管理局获悉,证监会已同意在北京.苏州.上海.浙江.深圳等地区的区域性股权市场参与区块链建设工作.以上5市金融监管局将按照中国证监会的统一部署要求推进建设工作. ...
- 题解 CF1428G Lucky Numbers (Easy Version and Hard Version)
这题没有压行就成 \(\texttt{Hard Version}\) 最短代码解了( 要知道这题那么 \(sb\) 就不啃 \(D\) 和 \(E\) 了. \(\texttt{Solution}\) ...
- Springboot — 用更优雅的方式发HTTP请求:RestTemplate
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率. 我之前的HTTP开发是用ap ...
- oracle 时间段查询
<select id="selectByRzrq" resultMap="BaseResultMap" parameterType="java. ...
- (干货)构建镜像之docker commit
Docker提供了两种构建镜像的方法:docker commit命令喝Dockerfile构建文件. docker commit 不推荐 (1).这是手工构建镜像的方式,容易出错,效率低且可重复性 ...
- python写几个排序算法
def maopao(data: list): """ 两两比较 :param data: :return: """ length = le ...
- 一文搞懂I/O多路复用机及其技术
前言 高性能是每个程序员的追求,无论写一行代码还是做一个系统,都希望能够达到高性能的效果.高性能架构设计主要集中在两方面: 尽量提升单服务器的性能,将单服务器的性能发挥到极致 如果单服务器无法支撑 ...
- Another MySQL daemon already running with the same unix socket. & ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
mysql 断电后启动失败解决 应该是mysql.sock文件还存在. 把这个文件删掉就可以了. mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.s ...
- js下 Day11、案例
一.成绩分类 效果图: 功能思路分析: 1. 渲染数据 2. 鼠标按下开启拖拽 \1. 给成绩盒子绑定鼠标按下事件(mousedown),用事件委托做多个标签的拖拽 \2. 开启控制拖拽的变量 \3. ...
- [日常摸鱼]bzoj2724蒲公英-分块
区间众数经典题~ http://begin.lydsy.com/JudgeOnline/problem.php?id=4839这里可以提交~ 题意大概就是没有修改的询问区间众数,如果有一样的输出最小的 ...