开源: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人阅读 ...
随机推荐
- sudo rm -rf /*含义
sudo ----- 管理员权限 rm ------ remove 移除 rf ------ recursive递归 force强制 /* ------ 目录下所有文档
- antDesign中排序sorter的坑
antd中sorter是写在columns中的一个配置,结果为一个回调函数 如图,这是我项目中使用sorter的小例子,参数a,b分别为列表第0项数据和第1项数据.回调函数中return一个值,按照什 ...
- 【Electron Playground】Electron 窗口问题汇总
作者:Kurosaki 本节旨在汇总在开发Electron 窗口可能遇到的问题,做一个汇总,后续遇到问题会持续更新. 1. 窗口闪烁问题. const { BrowserWindow } = requ ...
- 07-flask-使用sqlalchemy
代码 from flask import Flask, render_template from sqlalchemy import create_engine from sqlalchemy.ext ...
- angualr8 循环对象
<div *ngFor="let item of object | keyvalue"> {{item.key}}:{{item.value}} </div> ...
- openstack高可用集群19-linuxbridge结合vxlan
生产环境,假设我们的openstack是公有云,我们一般的linuxbridge结合vlan的模式相对于大量的用户来说是vlan是不够用的,于是我们引进vxlan技术解决云主机内网网络通讯的问题. 我 ...
- IIS重写2.0 IIS伪静态 下载地址
IIS重写2.0 IIS伪静态 下载地址 https://www.iis.net/downloads/microsoft/url-rewrite#additionalDownloads Downloa ...
- easyui中开始时间小于结束时间 不然无法点击
<tr> <td align="right">用药开始时间:</td> <td><input id="time_fr ...
- Qt学习笔记-了解信号与槽-自定义信号-自定义槽
信号与槽是连接不同控件直接的渠道. 这里以Horizontal Slider和Dial两个控件举例. 目的是在改变滑条的数值时,Dial也随之响应. 首先添加两个控件. 然后按快捷键F4进入控件编辑模 ...
- python实现AES/DES/RSA/MD5/SM2/SM4/3DES加密算法模板汇总
都是作者累积的,且看其珍惜,大家可以尽量可以保存一下,如果转载请写好出处https://www.cnblogs.com/pythonywy 一.md5加密 1.简介 这是一种使用非常广泛的加密方式,不 ...