我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#实现热更新服务器程序的具体过程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#实现热更新服务器程序的具体过程

热更新有没有解决一些开发问题的痛点

其实首先探讨的一个问题就是,热更服务器程序到底有没有必要出现,或者说有没有适用场景,我个人觉得吧还是有的。

如果真的可以在不重启应用的情况下实现逻辑的更新,这未尝对于一些紧急的情况不是一个好消息,尤其是一些小团队、小创业公司刚起步的时候,技术测试流程和人力不会像成规模的企业那样完善,那么带来的问题就是上线后的应用、游戏可能会存在一些Bug,如果不严重还好,可以留到下一个迭代更新统一修复,但是如果严重了,又考虑如果此刻关服修复会导致用户流失,那么这时候不停服热更新就有了应用场景,可以在用户无感知的情况下进行逻辑的修复工作。这也是热更功能主要的适用场景,至于增加新功能或者删除一些功能也可以通过不停服的方式来操作。

那么说完这个需求后,接下就是怎么才能实现这个功能。其实这个功能主要还是利用了C#自带的反射,在新的Dotnet框架中.net core3.0以后和.net5.0以后,微软对Assembly加载做了进一步整理,虽然以前也有类似功能,但是众所周知的原因,以前的.net版本混乱,现在微软既开源也统一化版本,可以说在未来时间里,.Net的潜力不可估量,那么我所讲的,也是基于较新的框架版本实现的。

热更新实现原理

AssemblyLoadContext 这个类就是今天的主角,它的主要功能就是隔离式的程序上下文,什么意思,就是它具备一定保护,可以使动态加载的程序集不和静态加载的程序集混合在一起,而是独立运行在类似沙盒的空间里,但是又具备相互访问的权限。这就很厉害了,这样一来,我们可以加载自己的程序集,然后供本来应用调用,在需要更新的时候,把新的程序集加载进来,并且替换旧的程序,释放旧的程序集,这样就可以无缝衔接的执行新的逻辑了。

下面我就借用我自己写的框架来实现这个热更的过程,如果对热更原理本身感兴趣的,也可以去看看我写的热更源码,我会在文章最下面贴上我的开源项目地址,源码里面基本上都是有注释的,所以看起来也不会很难。

具体的实现过程

首先我们创建一个.Net5.0或者.Netcore3.1的项目,取名Abc。​

创建成功,我们找到依懒项,右击管理Nuget程序包,选择浏览标签搜索:EasySharpFrame,然后选中后点击下载按钮进行安装。

安装完成后,框架就算成功安装好了,接下来,我们再从解决方案右击新建一个新的项目,这个项目就是用于热更逻辑实现的动态库,名字就叫Hotfix,创建之后,在解决方案资源管理器一栏中就会看到这个项目已经成功添加进去了,之后我们右击这个Hotfix项目的依赖项,找到添加项目引用,直接把 Abc 勾选确定,至此项目的添加创建步骤就完成了。​​​​

接下来就是开始写代码实际应用了,首先在Abc主项目中的Program.cs入口中,调用框架中热更管理单例。因为我们没有更改Hotfix项目的默认配置,所以生成出来的Dll文件名就是Hotfix,然后我们在Hotfix项目里添加一个Main.cs的入口文件,这里通过热更管理器就完成了初始化,后面每次重载也只需要重复这个步骤就可以了。


class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");

        // 确保进行不会自动结束
        while (true)
        {
            // 调用热更模块加载Hotfix
            HotfixMgr.Instance.Load("Hotfix", "Hotfix.Main");
            // 回车继续,否则阻塞
            Console.ReadLine();
        }
    }
}

接下来,我们在Hotfix项目里Main.cs中加点测试内容。


public class Main
{
    public void Hello()
    {
        Console.WriteLine("Hello World");
    }
}

并且在刚刚主工程代码里加点东西。


// 调用热更模块加载Hotfix
HotfixMgr.Instance.Load("Hotfix", "Hotfix.Main");
// 这里可以通过Agent调用测试入口的函数
HotfixMgr.Instance.Agent.Hello();
// 回车继续,否则阻塞
Console.ReadLine();

这样一个简单的热更事例就完成了,接下来生成解决方案。然后找到Hotfix项目生成路径,把关于Hotfix.dll和Hotfix.pdb两个文件复制粘贴到Abc的生成路径下。双击Abc.exe,启动事例查看结果。注:pdb是用于给运行时提供出错时准确提示错误的解释文件,实际运行只需要dll,如果不需要查看问题出处,可以只复制dll即可。​

此时不要关闭控制台,继续回到VS中,修改一下Main.cs的内容,并且这次只生成Hotfix项目,把生成好的dll和pdb复制到Abc中。


public class Main
{
    public void Hello()
    {
        // 修改前
        // Console.WriteLine("Hello World");
        // 修改后
        Console.WriteLine("Hello New World");
    }
}

替换完成后,在控制台回车一下,结果显示,新的逻辑已经更新至程序中。

以上就是一个简单的热更流程展示,框架提供的热更功能还有更多功能,这里只是简单介绍一下热更的原理与实现。如果对框架感兴趣的朋友可以到github上去了解。

项目地址:github.com/suxf/EasySh…

总结

到此这篇关于C#实现热更新服务器程序的文章就介绍到这了,更多相关C#热更新服务器程序内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#实现热更新服务器程序的具体过程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

uniApp实现热更新的思路与详细过程

经常在做app的时候,会有做热更新的需求,这也是常用的更新app的一种手段,下面这篇文章主要给大家介绍了关于uniApp实现热更新的思路与详细过程,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-11-16

C#将dll打包到程序中的具体实现

这篇文章介绍了C#将dll打包到程序中的具体实现,有需要的朋友可以参考一下
2022-11-15

C#WinForm实现自动更新程序的方法详解

这一篇就着重写一下客户端的代码,客户端主要实现的有:启动后检测本地的xml文件,然后发送到服务器获取需要更新的文件以及版本列表,感兴趣的小伙伴可以了解一下
2022-11-13

如何理解Python绑定C++程序的具体实现方法

本篇文章给大家分享的是有关如何理解Python绑定C++程序的具体实现方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python编程语言的应用范围比较广泛,应用方式灵活,可
2023-06-17

C#WinForm实现自动更新程序之客户端的示例代码

这篇文章主要为大家详细介绍了利用C#WinForm实现自动更新程序之客户端的实现方法,文中的示例代码讲解详细,感兴趣的小伙伴可以尝试一下
2022-11-13

c#项目实现发布到服务器全过程

这篇文章主要介绍了c#项目实现发布到服务器全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-15

Linux C 后台服务程序单进程控制的实现

介绍通常后台服务器程序都必须有且只有一个进程,那么如何单进程呢? 本例子是通过flock函数对/var/run/myserver.pid记录pid文件的进行加锁若加锁不正常,说明后台服务进程已经在运行了,这时则直接报错退出若加锁成功,说明后
2022-06-04

如何进行C#网络编程服务器端程序的实现源码浅析

本篇文章为大家展示了如何进行C#网络编程服务器端程序的实现源码浅析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C#网络编程服务器端程序实现源码是怎么样的呢?让我们来看看其中重要的一部分:由于在此次
2023-06-17

C语言对结构体数组按照某项规则进行排序的实现过程探究

这篇文章主要介绍了C语言对结构体数组按照某项规则进行排序的实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-02-01

云服务器是如何实现的原理和过程

云服务器是一种虚拟服务器技术,其原理和过程与传统的服务器有很大的不同。以下是云服务器的基本原理和过程:云计算平台的构成和运行环境:云平台通常由多个云计算服务商提供,这些服务商通过互联网连接,为用户提供云计算服务。云计算平台通常由多个虚拟机组成,这些虚拟机可以运行在不同的硬件平台上,如处理器、内存、存储等。虚拟机的创建和管理:用户需要创建一个虚拟机,并将其添加到云平台中以供其他用户使用。虚拟机可以是单个物理实...
2023-10-27

Python通过RabbitMQ服务器实现交换机功能的实例教程

快速回顾一下RabbitMQ服务器的安装:sudo apt-get install rabbitmq-serverPython使用RabbitMQ需要Pika库:sudo pip install pika好了,接下来我们先看交换机的工作原理
2022-06-04

Android开发实现查询远程服务器的工具类QueryUtils完整实例

本文实例讲述了Android开发实现查询远程服务器的工具类QueryUtils。分享给大家供大家参考,具体如下:public class QueryUtils
2023-05-30

小程序切换到阿里云服务器的可行性及实现方法

#本文将探讨小程序切换到阿里云服务器的可行性,并详细介绍如何实现这一目标。无论你是一个小程序开发者,还是一个想要提升小程序性能的用户,本文都将为你提供有价值的信息。实现方法:1.理解小程序和阿里云服务器的特性首先,我们需要了解小程序和阿里云服务器的基本特性。小程序是一种轻量级的应用,它运行在微信或支付宝等移动平台
小程序切换到阿里云服务器的可行性及实现方法
2024-01-25

【物联网开发】-微信小程序之MQTT连接,基于MQTT实现设备-服务器-小程序的消息传输

一、前期知识准备 想要开发微信小程序,首先要有一些基础知识:html、cs、js、json等,小程序中要用到的知识框架大体相同,一个页面包括js、json、wxml、wxss格式的文件。 由于本人此前从未接触过小程序开发,本篇文章将会以新手
2023-08-17

编程热搜

目录