亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#實(shí)現(xiàn)熱更新服務(wù)器程序的具體過(guò)程

 更新時(shí)間:2021年07月12日 10:43:53   作者:楓葉不太紅  
什么是熱更新?就是不停機(jī)更新,實(shí)時(shí)更新,這篇文章主要給大家介紹了關(guān)于C#實(shí)現(xiàn)熱更新服務(wù)器程序的具體過(guò)程,通過(guò)熱更新改善用戶體驗(yàn)(節(jié)省流量、時(shí)間、操作程度),需要的朋友可以參考下

熱更新有沒(méi)有解決一些開(kāi)發(fā)問(wèn)題的痛點(diǎn)

其實(shí)首先探討的一個(gè)問(wèn)題就是,熱更服務(wù)器程序到底有沒(méi)有必要出現(xiàn),或者說(shuō)有沒(méi)有適用場(chǎng)景,我個(gè)人覺(jué)得吧還是有的。

如果真的可以在不重啟應(yīng)用的情況下實(shí)現(xiàn)邏輯的更新,這未嘗對(duì)于一些緊急的情況不是一個(gè)好消息,尤其是一些小團(tuán)隊(duì)、小創(chuàng)業(yè)公司剛起步的時(shí)候,技術(shù)測(cè)試流程和人力不會(huì)像成規(guī)模的企業(yè)那樣完善,那么帶來(lái)的問(wèn)題就是上線后的應(yīng)用、游戲可能會(huì)存在一些Bug,如果不嚴(yán)重還好,可以留到下一個(gè)迭代更新統(tǒng)一修復(fù),但是如果嚴(yán)重了,又考慮如果此刻關(guān)服修復(fù)會(huì)導(dǎo)致用戶流失,那么這時(shí)候不停服熱更新就有了應(yīng)用場(chǎng)景,可以在用戶無(wú)感知的情況下進(jìn)行邏輯的修復(fù)工作。這也是熱更功能主要的適用場(chǎng)景,至于增加新功能或者刪除一些功能也可以通過(guò)不停服的方式來(lái)操作。

那么說(shuō)完這個(gè)需求后,接下就是怎么才能實(shí)現(xiàn)這個(gè)功能。其實(shí)這個(gè)功能主要還是利用了C#自帶的反射,在新的Dotnet框架中.net core3.0以后和.net5.0以后,微軟對(duì)Assembly加載做了進(jìn)一步整理,雖然以前也有類(lèi)似功能,但是眾所周知的原因,以前的.net版本混亂,現(xiàn)在微軟既開(kāi)源也統(tǒng)一化版本,可以說(shuō)在未來(lái)時(shí)間里,.Net的潛力不可估量,那么我所講的,也是基于較新的框架版本實(shí)現(xiàn)的。

熱更新實(shí)現(xiàn)原理

AssemblyLoadContext 這個(gè)類(lèi)就是今天的主角,它的主要功能就是隔離式的程序上下文,什么意思,就是它具備一定保護(hù),可以使動(dòng)態(tài)加載的程序集不和靜態(tài)加載的程序集混合在一起,而是獨(dú)立運(yùn)行在類(lèi)似沙盒的空間里,但是又具備相互訪問(wèn)的權(quán)限。這就很厲害了,這樣一來(lái),我們可以加載自己的程序集,然后供本來(lái)應(yīng)用調(diào)用,在需要更新的時(shí)候,把新的程序集加載進(jìn)來(lái),并且替換舊的程序,釋放舊的程序集,這樣就可以無(wú)縫銜接的執(zhí)行新的邏輯了。

下面我就借用我自己寫(xiě)的框架來(lái)實(shí)現(xiàn)這個(gè)熱更的過(guò)程,如果對(duì)熱更原理本身感興趣的,也可以去看看我寫(xiě)的熱更源碼,我會(huì)在文章最下面貼上我的開(kāi)源項(xiàng)目地址,源碼里面基本上都是有注釋的,所以看起來(lái)也不會(huì)很難。

具體的實(shí)現(xiàn)過(guò)程

首先我們創(chuàng)建一個(gè).Net5.0或者.Netcore3.1的項(xiàng)目,取名Abc。​

創(chuàng)建成功,我們找到依懶項(xiàng),右擊管理Nuget程序包,選擇瀏覽標(biāo)簽搜索:EasySharpFrame,然后選中后點(diǎn)擊下載按鈕進(jìn)行安裝。

安裝完成后,框架就算成功安裝好了,接下來(lái),我們?cè)購(gòu)慕鉀Q方案右擊新建一個(gè)新的項(xiàng)目,這個(gè)項(xiàng)目就是用于熱更邏輯實(shí)現(xiàn)的動(dòng)態(tài)庫(kù),名字就叫Hotfix,創(chuàng)建之后,在解決方案資源管理器一欄中就會(huì)看到這個(gè)項(xiàng)目已經(jīng)成功添加進(jìn)去了,之后我們右擊這個(gè)Hotfix項(xiàng)目的依賴項(xiàng),找到添加項(xiàng)目引用,直接把 Abc 勾選確定,至此項(xiàng)目的添加創(chuàng)建步驟就完成了。​​​​

接下來(lái)就是開(kāi)始寫(xiě)代碼實(shí)際應(yīng)用了,首先在Abc主項(xiàng)目中的Program.cs入口中,調(diào)用框架中熱更管理單例。因?yàn)槲覀儧](méi)有更改Hotfix項(xiàng)目的默認(rèn)配置,所以生成出來(lái)的Dll文件名就是Hotfix,然后我們?cè)贖otfix項(xiàng)目里添加一個(gè)Main.cs的入口文件,這里通過(guò)熱更管理器就完成了初始化,后面每次重載也只需要重復(fù)這個(gè)步驟就可以了。

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

        // 確保進(jìn)行不會(huì)自動(dòng)結(jié)束
        while (true)
        {
            // 調(diào)用熱更模塊加載Hotfix
            HotfixMgr.Instance.Load("Hotfix", "Hotfix.Main");
            // 回車(chē)?yán)^續(xù),否則阻塞
            Console.ReadLine();
        }
    }
}

接下來(lái),我們?cè)贖otfix項(xiàng)目里Main.cs中加點(diǎn)測(cè)試內(nèi)容。

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

并且在剛剛主工程代碼里加點(diǎn)東西。

// 調(diào)用熱更模塊加載Hotfix
HotfixMgr.Instance.Load("Hotfix", "Hotfix.Main");
// 這里可以通過(guò)Agent調(diào)用測(cè)試入口的函數(shù)
HotfixMgr.Instance.Agent.Hello();
// 回車(chē)?yán)^續(xù),否則阻塞
Console.ReadLine();

這樣一個(gè)簡(jiǎn)單的熱更事例就完成了,接下來(lái)生成解決方案。然后找到Hotfix項(xiàng)目生成路徑,把關(guān)于Hotfix.dll和Hotfix.pdb兩個(gè)文件復(fù)制粘貼到Abc的生成路徑下。雙擊Abc.exe,啟動(dòng)事例查看結(jié)果。注:pdb是用于給運(yùn)行時(shí)提供出錯(cuò)時(shí)準(zhǔn)確提示錯(cuò)誤的解釋文件,實(shí)際運(yùn)行只需要dll,如果不需要查看問(wèn)題出處,可以只復(fù)制dll即可。​

此時(shí)不要關(guān)閉控制臺(tái),繼續(xù)回到VS中,修改一下Main.cs的內(nèi)容,并且這次只生成Hotfix項(xiàng)目,把生成好的dll和pdb復(fù)制到Abc中。

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

替換完成后,在控制臺(tái)回車(chē)一下,結(jié)果顯示,新的邏輯已經(jīng)更新至程序中。

以上就是一個(gè)簡(jiǎn)單的熱更流程展示,框架提供的熱更功能還有更多功能,這里只是簡(jiǎn)單介紹一下熱更的原理與實(shí)現(xiàn)。如果對(duì)框架感興趣的朋友可以到github上去了解。

項(xiàng)目地址:github.com/suxf/EasySh

總結(jié)

到此這篇關(guān)于C#實(shí)現(xiàn)熱更新服務(wù)器程序的文章就介紹到這了,更多相關(guān)C#熱更新服務(wù)器程序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在C#中合并和解析相對(duì)路徑方式

    在C#中合并和解析相對(duì)路徑方式

    Path類(lèi)提供了幾個(gè)用于操作文件路徑的靜態(tài)方法,其中包括Combine方法和GetFullPath方法,Combine方法將兩個(gè)路徑合并在一起,但不會(huì)解析包含相對(duì)元素的路徑;GetFullPath方法可以解析包含相對(duì)元素的路徑并返回絕對(duì)路徑
    2025-01-01
  • 如何利用c#實(shí)現(xiàn)通用守護(hù)進(jìn)程

    如何利用c#實(shí)現(xiàn)通用守護(hù)進(jìn)程

    這篇文章主要給大家介紹了關(guān)于如何利用c#實(shí)現(xiàn)通用守護(hù)進(jìn)程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • C#使用Spire.Doc實(shí)現(xiàn)將Word文檔轉(zhuǎn)換為XML

    C#使用Spire.Doc實(shí)現(xiàn)將Word文檔轉(zhuǎn)換為XML

    將 Word 文檔轉(zhuǎn)換為 XML 并非簡(jiǎn)單的格式轉(zhuǎn)換,其背后蘊(yùn)含著巨大的業(yè)務(wù)價(jià)值和技術(shù)優(yōu)勢(shì),下面我們就來(lái)看看如何使用C#實(shí)現(xiàn)Word文檔轉(zhuǎn)換為XML吧
    2025-10-10
  • winform樹(shù)形菜單無(wú)限級(jí)分類(lèi)實(shí)例

    winform樹(shù)形菜單無(wú)限級(jí)分類(lèi)實(shí)例

    本文介紹了“winform樹(shù)形菜單無(wú)限級(jí)分類(lèi)實(shí)例”,需要的朋友可以參考一下
    2013-03-03
  • C#中同步和異步回調(diào)的實(shí)現(xiàn)

    C#中同步和異步回調(diào)的實(shí)現(xiàn)

    在C#中,同步回調(diào)和異步回調(diào)都是用于處理任務(wù)或事件完成的機(jī)制,本文主要介紹了C#中同步和異步回調(diào)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • c# 用Base64實(shí)現(xiàn)文件上傳

    c# 用Base64實(shí)現(xiàn)文件上傳

    這篇文章主要介紹了c# 用Base64實(shí)現(xiàn)文件上傳的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • c#如何利用定時(shí)器自動(dòng)備份數(shù)據(jù)庫(kù)詳解

    c#如何利用定時(shí)器自動(dòng)備份數(shù)據(jù)庫(kù)詳解

    在開(kāi)發(fā)過(guò)程當(dāng)中,你一定遇到文件損壞活或丟失的煩惱,而每天備份又很麻煩,你只要設(shè)置每天備份的時(shí)間,并將程序加入啟動(dòng)項(xiàng)中,就可以自動(dòng)完成備份,這篇文章主要給大家介紹了關(guān)于c#如何利用定時(shí)器自動(dòng)備份數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • 理解C#編程中的靜態(tài)類(lèi)和靜態(tài)成員以及密封類(lèi)

    理解C#編程中的靜態(tài)類(lèi)和靜態(tài)成員以及密封類(lèi)

    這篇文章主要介紹了理解C#編程中的靜態(tài)類(lèi)和靜態(tài)成員以及密封類(lèi),注意類(lèi)成員的相關(guān)訪問(wèn)限制和類(lèi)的繼承問(wèn)題,需要的朋友可以參考下
    2016-01-01
  • DevExpress根據(jù)條件設(shè)置GridControl RepositoryItem是否可編輯

    DevExpress根據(jù)條件設(shè)置GridControl RepositoryItem是否可編輯

    這篇文章主要介紹了DevExpress根據(jù)條件設(shè)置GridControl RepositoryItem是否可編輯,需要的朋友可以參考下
    2014-08-08
  • C# OpenCvSharp實(shí)現(xiàn)通過(guò)特征點(diǎn)匹配圖片

    C# OpenCvSharp實(shí)現(xiàn)通過(guò)特征點(diǎn)匹配圖片

    這篇文章主要為大家詳細(xì)介紹了C#如何結(jié)合OpenCVSharp4實(shí)現(xiàn)通過(guò)特征點(diǎn)匹配圖片,文中的示例代碼簡(jiǎn)潔易懂,具有一定的學(xué)習(xí)價(jià)值,需要的小伙伴可以參考下
    2023-11-11

最新評(píng)論