1:下载、开源、使用教程

下载地址:Github 下载 、其它下载

开源地址: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 应用程序热更新升级工具(全网第一份公开的解决方案)的更多相关文章

  1. 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新

    大家好,  我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain  用于 热更新 . 简单的说, 原理就是 类似 Asp.net 那样 让 当前 WebApp 运行在一个 A ...

  2. Aspnetcore下面服务器热更新与配置热加载

    原文:Aspnetcore下面服务器热更新与配置热加载 Asp.net的热更新方案Appdomain在aspnetcore中不被支持了 新的方案如下: 配置文件更新选项 reloadOnChange ...

  3. 微信小程序热更新,小程序提示版本更新,版本迭代,强制更新,微信小程序版本迭代

    相信很多人在做小程序的时候都会有迭代每当版本迭代的时候之前老版本的一些方法或者显示就不够用了这就需要用到小程序的热更新.或者说是提示升级小程序版本 editionUpdate:function(){ ...

  4. cocos2d-js 在线更新代码脚本 动态更新脚本程序 热更新 绕过平台审核 不需重新上架

    2014年8月15日补充 cocos2d-js 3.0 rc0 的AssetsManager有缺陷,有一些注意点:(可以阅读源代码发现) 1.旧manifest中有,但新manifest中没有的文件( ...

  5. 关于RN热更新-iOS端捕获加载jsbundle异常解决方案

    1.监听加载jsbundle异常的处理 模拟情况:合并增量后jsbundle文件出现部分错误调试发现当加载jsbundle出现异常时,RN模块RCTBatchedBridge.m中如下代码会执行: - ...

  6. 项目升级,为了热更新使用lua。

    现在发行商的要求越来越变态,必须要求程序热更新,以应对上线后的bug及时调整,我们目标锁定在 ulua, slua,(也对L#感兴趣过),一开始对 ulua 很困惑,unity 的 assetstor ...

  7. Unity3D 热更新方案(集合各位专家的汇总)

    http://blog.csdn.net/guofeng526/article/details/52662994 热更新”这个词,在Unity3D的应用下,是有些语义错误的,但是作为大家都熟知的一项技 ...

  8. ReactNative 告别CodePush,自建热更新版本升级环境

    微软的CodePush热更新非常难用大家都知道,速度跟被墙了没什么区别. 另外一方面,我们不希望把代码放到别人的服务器.自己写接口更新总归感觉安全一点. so,就来自己搞个React-Native A ...

  9. Lua------------------unity与lua的热更新

    [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新完全解读 标签: 游戏开发游戏解决方案用户体验unity3d 2014-10-18 23:23 7680人阅读 ...

随机推荐

  1. qq 表情库

    ![/qq](https://cdn.luogu.com.cn/upload/pic/62224.png) ![/cy](https://cdn.luogu.com.cn/upload/pic/622 ...

  2. Electron安装打包指南

    当前环境Debian Linux-Deepin 安装Node 直接下载 命令下载 下载 wget https://nodejs.org/dist/v14.15.1/node-v14.15.1-linu ...

  3. JavaSE06-面向对象

    1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 ,所以我们也常常说万物皆对象. 类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象 类是对象的数据类型,类是具有相同属性和 ...

  4. 如何自定义Kubernetes资源

    目前最流行的微服务架构非Springboot+Kubernetes+Istio莫属, 然而随着越来越多的微服务被拆分出来, 不但Deploy过程boilerplate的配置越来越多, 且繁琐易错, 维 ...

  5. git基本操作(适合新手)

    本人也是刚刚开始学习 大家可以一起交流,大佬可以在教一下 目录 git配置 git本地仓库 SSH提交方式,git提交远程仓库 一.git配置 git config --global user.nam ...

  6. 精尽Spring MVC源码分析 - HandlerAdapter 组件(三)之 HandlerMethodArgumentResolver

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  7. php 文件上传错误

    假设文件上传字段的名称img,则: $_FILES['img']['error']有以下几种类型 1.UPLOAD_ERR_OK 其值为 0,没有错误发生,文件上传成功. 2.UPLOAD_ERR_I ...

  8. Python:值得学习的二十个技巧

    本文为大家介绍20个值得记住的 Python 技巧,可以提升您编程技巧, 并为您节省大量时间. 在平常编程过程中,以下技巧大多非常有用. 1 字符串反转 使用切片反转字符串. str1="q ...

  9. C# IAsyncEnumerable Linq使用

    NET Core 3.0和C# 8.0最激动人心的特性之一就是IAsyncEnumerable<T>(也就是async流).但它有什么特别之处呢?我们现在可以用它做哪些以前不可能做到的事? ...

  10. 实现JavaScript继承

    使用TypeScript或者ES2015+标准中的extends关键字是很容易实现继承的,但这不是本文的重点.JS使用了基于原型(prototype-based)的继承方式,extends只是语法糖, ...