.NET Core迁移前的准备工作
前段時(shí)間遷移.NET Core做了大量的試水和評(píng)估,今天整理一下分享給大家。大致有以下幾個(gè)部分:
1. .NET Core的由來(lái)
2. 為什么要遷移.NET Core
3. .NET Core3.X主要特性
4. .NET Standard和.NET Core
5. .NET Core Roadmap&版本選擇
接下來(lái),我們?cè)敿?xì)展開(kāi)說(shuō)吧。
一、.NET Core的由來(lái)
? ?這個(gè)更像是科普的資料,因?yàn)閳F(tuán)隊(duì)的小伙伴有半路出家的,對(duì).NET 的光輝歷史不是非常了解,所以有必要帶著大家看一遍.NETCore的由來(lái):
? ?說(shuō).NET Core,需要先說(shuō)一下.NET. 當(dāng)年Java剛剛興起,如火如荼,微軟也非常推崇Java,當(dāng)時(shí)Windows平臺(tái)的Java虛擬機(jī)就是微軟按照J(rèn)VM標(biāo)準(zhǔn)實(shí)現(xiàn)的,據(jù)說(shuō)也是當(dāng)時(shí)性能最好的Java虛擬機(jī)。但是微軟也是有私心的,微軟總想搞點(diǎn)Windows平臺(tái)上的特性,有點(diǎn)想把Java綁定到Windows平臺(tái)上的味道,另外Sun公司確實(shí)有點(diǎn)小心眼,于是Sun公司就跟微軟鬧掰了,然后微軟就推出了 .NET,.NET從出生開(kāi)始其實(shí)就借鑒了Java,然后又一步步在語(yǔ)言特性、窗體開(kāi)發(fā)等方面實(shí)現(xiàn)了超越。Java在1.6版本以后發(fā)展緩慢,后面Java也在語(yǔ)言特性上借鑒了 .NET。
? ?.NET雖然一直發(fā)展的不錯(cuò),也有WPF、Unity3D這樣具有競(jìng)爭(zhēng)力框架的出現(xiàn)。但是.NET平臺(tái)在一些較大的項(xiàng)目,不太受互聯(lián)網(wǎng)公司的喜愛(ài)(雖然京東、當(dāng)當(dāng)、攜程當(dāng)年也是.NET技術(shù)路線(xiàn))。但是因?yàn)?NET不是開(kāi)源的框架,也不是可跨平臺(tái)的框架,那就會(huì)帶來(lái)以下問(wèn)題:
? ? ?成本:選擇.NET就要選擇Visual Studio,Windows Server,license是不可忽視的成本;
? ? ?生態(tài):沒(méi)有來(lái)自于社區(qū)的貢獻(xiàn),那.NET沒(méi)有誕生優(yōu)秀框架的土壤,技術(shù)社區(qū)雖然有微軟的特殊扶持,但是整體不太理想
? ? ?人才:無(wú)法吸引一線(xiàn)公司優(yōu)秀互聯(lián)網(wǎng)工程師加入,因?yàn)樗麄冇肑ava、Go等,但是.NET Core誕生之后會(huì)大為改觀,騰訊、網(wǎng)易都有在使用。
? ? 縱使有Mono這么強(qiáng)大的框架,可以讓 .NET 跑在Linux上,但是這還不夠。畢竟Mono只能發(fā)揮.NET部分有限的能力。
? ? 同時(shí),云計(jì)算的普及,跨平臺(tái)需求勢(shì)不可擋,Linux 作為Server的不二OS,.NET不支持Linux,比較尷尬!
? ? 另外,容器時(shí)代已經(jīng)不可逆轉(zhuǎn),跟Windows的強(qiáng)依賴(lài),如何上Docker?
? ? 總之,形式所迫,擁抱變化和未來(lái),.NET Core應(yīng)運(yùn)而生。
二、為什么要遷移.NET Core
? ?總結(jié)了以下幾點(diǎn),大家可以補(bǔ)充:
.NET Core代表著未來(lái).Net的發(fā)展方向
產(chǎn)品新特性、重點(diǎn)技術(shù)支持微軟優(yōu)先考慮在最新.NET Core版本上支持
更優(yōu)的代碼、更好的性能,社區(qū)大家都在貢獻(xiàn)、優(yōu)化代碼
跨平臺(tái)支持,支持部署在Linux,可以降低VM的成本
Docker部署支持,更低的成本,更高的資源利用率,未來(lái)云原生的核心組成
面向現(xiàn)代互聯(lián)網(wǎng)應(yīng)用、微服務(wù)架構(gòu)、和DevOps更好地集成
開(kāi)源:https://github.com/dotnet/core
更好的生態(tài)和社區(qū)
三、 .NET Core3.X主要特性
? ?同時(shí)支持Windows和Linux、MacOS,滿(mǎn)足不同開(kāi)發(fā)者的需求,對(duì)于Web開(kāi)發(fā)提供了ASP.NET Core, 對(duì)于常用數(shù)據(jù)庫(kù)訪(fǎng)問(wèn),提供了EF Core,對(duì)于機(jī)器學(xué)習(xí),提供了ML.NET。大家可以根據(jù)自己業(yè)務(wù)的需要,選擇合適的技術(shù)。
四、 .NET Standard和.NET Core
?先說(shuō)下事情的起源:
?.NET Framework從2002年起,一直在Release新版本,不支持跨平臺(tái)
?.NET Core是為了支持跨平臺(tái)產(chǎn)生的,類(lèi)似的有Mono、Xamarin
? 這樣,出現(xiàn)了兩套代碼、兩套類(lèi)庫(kù),對(duì)于開(kāi)發(fā)者來(lái)說(shuō),要同時(shí)掌握兩套SDK,會(huì)產(chǎn)生社區(qū)和技術(shù)的分裂。
??因此,.NET 要統(tǒng)一類(lèi)庫(kù)標(biāo)準(zhǔn),統(tǒng)一所有的API定義,這就是.NET Standard. 如下圖:
??
?.NET Standard的統(tǒng)一:
? .NET Standard定義了.NET平臺(tái),統(tǒng)一實(shí)現(xiàn)的一組API。實(shí)現(xiàn).Net Standard API的平臺(tái)都與目標(biāo).Net Standard庫(kù)兼容;
? .NET Framework和.NET Core都是.NET Standard的標(biāo)準(zhǔn)實(shí)現(xiàn)。.NET Standard是二者的交集。
? ?但是.NET Framework和.NET Core存在其個(gè)性化、擴(kuò)展的類(lèi)庫(kù),需要犧牲兼容性,即:
? ?假如用.NET Framework的個(gè)性化SDK。例如注冊(cè)表、Windows Service、Winform,這樣只能部署在Windows中。
? ?假如用.NET Core的個(gè)性化SDK,部署運(yùn)行時(shí),與Windows環(huán)境下.NET Framework不兼容。
? ?所以,如果應(yīng)用程序采用.NET Standard,同時(shí)支持.NET Framework和.NET Core,則可以實(shí)現(xiàn)兩者的兼容。一套代碼既支持運(yùn)行在.NET Framework運(yùn)行時(shí)下,又支持運(yùn)行在.NET Core運(yùn)行時(shí)下。
? ?同時(shí).NET Standard的版本對(duì)應(yīng).NET Core、.NET Framework、Mono、Xamarin等的版本,有個(gè)對(duì)照表:
? ?
? ?這張表非常重要。體現(xiàn)了一個(gè)規(guī)則:
? ?假如程序的目標(biāo)框架Targetframework 使用.NET Standard2.0, 則支持:
? ?.NET Core 2.0版本的工程可以引用
? ?.NET 4.6 版本的工程可以引用
? ? 但是低版本的.NET Core和.NET Framework則無(wú)法引用。
五 .NET Core Roadmap&版本選擇
?先看一下.NET Core最新的Roadmap:
??
?最新的.NET Core 3.1 將2019年11月發(fā)布,同時(shí)是LTS版本。如果大家現(xiàn)在開(kāi)始遷移.NET Core,建議選擇一個(gè)大版本、LTS版本。我們也將選擇這個(gè)版本。
原文鏈接:https://www.cnblogs.com/tianqing/p/11619005.html
.NET社區(qū)新聞,深度好文,歡迎訪(fǎng)問(wèn)公眾號(hào)文章匯總?http://www.csharpkit.com?
總結(jié)
以上是生活随笔為你收集整理的.NET Core迁移前的准备工作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C#刷遍Leetcode面试题系列连载(
- 下一篇: 沈向洋对于工程技术人员的十点经验分享