學(xué)習(xí)新的開(kāi)發(fā)框架是一項(xiàng)巨大的投資。您需要學(xué)習(xí)如何在新框架中編寫(xiě),構(gòu)建,測(cè)試,部署和維護(hù)應(yīng)用程序。作為開(kāi)發(fā)人員,有許多框架可供選擇,很難知道什么是最適合的。即使您正在使用.NET開(kāi)發(fā)軟件,.NET Core也不相同,您需要花時(shí)間學(xué)習(xí)使用它的工具和技術(shù)。為了理解為什么.NET Core值得一看,這有助于知道你從哪里開(kāi)始。
.NETCore的開(kāi)源協(xié)議
.NET Core從屬于.NET基金會(huì),由微軟進(jìn)行官方支持。使用最寬松的MIT和Apache 2開(kāi)源協(xié)議,文檔協(xié)議遵循CC-BY。這將允許任何人任何組織和企業(yè)任意處置,包括使用,復(fù)制,修改,合并,發(fā)表,分發(fā),再授權(quán),或者銷(xiāo)售。唯一的限制是,軟件中必須包含上述版 權(quán)和許可提示,后者協(xié)議將會(huì)除了為用戶提供版權(quán)許可之外,還有專利許可,并且授權(quán)是免費(fèi),無(wú)排他性的(任何個(gè)人和企業(yè)都能獲得授權(quán))并且永久不可撤銷(xiāo),相較于oracle對(duì)java和mysql的開(kāi)源協(xié)議微軟做出了最大的誠(chéng)意
如果您是.NET Framework開(kāi)發(fā)人員
.NET Core是為了重新啟動(dòng)某些Framework組件而為其他人提供跨平臺(tái)工作的機(jī)會(huì)。由于.NET Framework主要以托管(C#)代碼為基礎(chǔ)構(gòu)建,因此這些部分不需要更改代碼即可移至.NET Core。依賴于Windows特定組件的庫(kù)必須被移除或重構(gòu)以使用跨平臺(tái)替代方案。這同樣適用于您的應(yīng)用程序。
您的.NET應(yīng)用程序可以是跨平臺(tái)的
您現(xiàn)有的.NET Framework應(yīng)用程序可以在其他操作系統(tǒng)上工作。對(duì)于希望擴(kuò)大類(lèi)庫(kù)的受眾平臺(tái),或者希望在分布式應(yīng)用程序的其他領(lǐng)域使用相同代碼的開(kāi)發(fā)人員來(lái)說(shuō),這是非常好的選擇。即使你想用你亮瞎眼的MacBook上開(kāi)發(fā).NET,而無(wú)需雙啟動(dòng)到Windows。
并不是所有的框架都被移植到.NET Core,但主要的部分。存在一些API差異。例如,如果您使用了大量的反射,則可能需要重構(gòu)代碼才能使用Core。有關(guān)更多信息,請(qǐng)看文章末尾的的兩者差異部分。
ASP.NETCore勝過(guò)框架ASP.NET
ASP.NET Core和ASP.NET之間的性能差異是幾個(gè)數(shù)量級(jí)。大部分的ASP.NET被傳統(tǒng)的System.Web庫(kù)所限制。.NET Framework支持舊版本的ASP.NET項(xiàng)目,而且這個(gè)約束限制了ASP.NET的發(fā)展。微軟決定重寫(xiě)整個(gè)架構(gòu)。這意味著打破變化,但結(jié)果是值得的。
.NETCore是創(chuàng)新的焦點(diǎn)
向后兼容性是一把雙刃劍。這意味著您的應(yīng)用程序可以繼續(xù)得到新版本框架的支持,確保在新版本框架中所做的更改不會(huì)破壞現(xiàn)有的應(yīng)用程序。
所有的努力避免變化都限制了框架的創(chuàng)新。框架的變化需要徹底的理由(通常來(lái)自客戶),詳盡的測(cè)試以及來(lái)自多個(gè)層次產(chǎn)品組的批準(zhǔn)。
使用.NET Core,團(tuán)隊(duì)可以更容易專注的在.net core上工作。比如核心類(lèi)庫(kù)(如System.Collections)的更改仍然需要與.NET Framework相同的活力,但是ASP.NET Core或Entity Framework Core可以更輕松地進(jìn)行實(shí)質(zhì)性更改,而不受向后兼容性的限制。這允許更大的創(chuàng)新。
.NET Framework作為一個(gè)整體產(chǎn)品發(fā)布,但是.NETCore被分解成多個(gè)部分。現(xiàn)在開(kāi)發(fā)人員可以選擇使用哪個(gè)版本的庫(kù)。只要它在.NET標(biāo)準(zhǔn)庫(kù)之外,.NET Core團(tuán)隊(duì)就可以用較少的難度進(jìn)行創(chuàng)新。這就是為什么在將來(lái)你只能看到錯(cuò)誤修復(fù)的框架; .net core將獲得所有新功能。
發(fā)布周期更快
如果您曾在框架中遇到錯(cuò)誤,并將其報(bào)告給Microsoft,則您將知道發(fā)布修復(fù)需要多長(zhǎng)時(shí)間。這個(gè)框架有很長(zhǎng)的發(fā)布周期,通常至少要測(cè)量一年,而且在這些周期中還有很小的窗口用于特性工作。每個(gè)代碼更改都可能會(huì)導(dǎo)致框架中其他位置出現(xiàn)意外的問(wèn)題。為了給每個(gè)團(tuán)隊(duì)足夠的時(shí)間來(lái)測(cè)試框架,有很多時(shí)候代碼更改是受限制的或者嚴(yán)格審查的。如果您在.NET中發(fā)現(xiàn)了一個(gè)錯(cuò)誤,最好找到一個(gè)解決方法,而不是等待更新(這也是.NETCore開(kāi)源帶來(lái)的好處,您不需要完全依賴微軟支持才能解決問(wèn)題,這對(duì)于大型企業(yè)更是有利,可以利用技術(shù)資源來(lái)對(duì).NETCore進(jìn)行本企業(yè)定制化,成為.NETCore的分支來(lái)運(yùn)行)。
.NET Core遵循更快的發(fā)布步調(diào)。開(kāi)發(fā)人員可以使用夜間構(gòu)建來(lái)盡早測(cè)試。不屬于.NET標(biāo)準(zhǔn)庫(kù)的庫(kù)可以按自己的步調(diào)發(fā)布。因?yàn)樗袞|西都是開(kāi)源的,如果微軟沒(méi)有足夠快的響應(yīng),任何開(kāi)發(fā)者都可以提出修補(bǔ)。如果解決方法不被接受,討論就會(huì)公開(kāi)進(jìn)行,所有人都可以看到為什么做出這個(gè)決定
如果你是.NET新手
在Windows平臺(tái)上,.NET框架沒(méi)有太多的競(jìng)爭(zhēng)。微軟可以對(duì)從操作系統(tǒng)內(nèi)核層到高級(jí).NET庫(kù)的所有內(nèi)容進(jìn)行更改。通過(guò)將.NET引入其他平臺(tái),競(jìng)爭(zhēng)環(huán)境發(fā)生了變化。.NET現(xiàn)在必須與其他所有的開(kāi)發(fā)框架競(jìng)爭(zhēng)。
C#是一個(gè)了不起的語(yǔ)言
.NET的旗艦語(yǔ)言C#具有許多獨(dú)特的功能,例如語(yǔ)言集成查詢和異步構(gòu)造,這使得它強(qiáng)大且易于使用。相較于保守的java(我們也看到Oracle旗下的老牌java已經(jīng)已經(jīng)越來(lái)越難推出新特性,這是歷史包袱所導(dǎo)致,在將來(lái)模塊化的開(kāi)發(fā)中很難進(jìn)行更新維護(hù))C#也在不斷創(chuàng)新。C#團(tuán)隊(duì)公開(kāi)設(shè)計(jì)語(yǔ)言,因?yàn)樗麄兿M魏稳颂岢鼋ㄗh或參與討論。編譯器(Roslyn)完全是模塊化和可擴(kuò)展的。
ASP.NET Core性能與頂級(jí)Web平臺(tái)相當(dāng)
如果您正在編寫(xiě)Web應(yīng)用程序或服務(wù),那么ASP.NET Core是一個(gè)很好的搭建平臺(tái)。它具有出色的性能和低內(nèi)存占用。許多功能可以使您的應(yīng)用程序更容易開(kāi)發(fā)和維護(hù)。
.NET Core不是從頭開(kāi)始的
.NET在2000年以前就已經(jīng)出現(xiàn)了??蚣艽a在過(guò)去幾年中已經(jīng)得到了鞏固,開(kāi)發(fā)人員也從中受益。已經(jīng)被移植到Core的大部分Framework代碼都沒(méi)有改變。這使.NET Core在構(gòu)建應(yīng)用程序的可靠框架方面領(lǐng)先一步。.NET Core也完全由Microsoft支持還有越來(lái)越活躍的開(kāi)源社區(qū)例如紅帽組織。這降低了為您的應(yīng)用程序使用Core的風(fēng)險(xiǎn)。
什么是.NETCore?
為了理解.NET Core,它有助于理解.NET Framework。微軟在21世紀(jì)初發(fā)布了.NET Framework。.NET Framework是一個(gè)僅限于Windows的開(kāi)發(fā)框架,它在最底層提供了內(nèi)存管理,安全性,異常處理和許多其他功能。.NET框架附帶一大堆庫(kù),可執(zhí)行從XML解析到HTTP請(qǐng)求的各種功能。它還支持幾種語(yǔ)言,并將它們編譯成相同的通用中間語(yǔ)言; 任何語(yǔ)言都可以使用任何其他語(yǔ)言構(gòu)建的庫(kù)。這些關(guān)鍵概念也出現(xiàn)在.NET Core中。
2016年,微軟收購(gòu)了Xamarin并發(fā)布了.NET Core 1.0。之前Xamarin已經(jīng)移植了.NET框架的大部分內(nèi)容來(lái)運(yùn)行在基于Linux / Unix的操作系統(tǒng)上。一些代碼可以在.NET Framework,Xamarin和新的.NET Core之間共享,但編譯后的二進(jìn)制文件不能。.NET Core的一部分努力是創(chuàng)建一個(gè)標(biāo)準(zhǔn)化的平臺(tái),允許所有.NET實(shí)現(xiàn)共享相同的庫(kù)。
圖1 .NET框架,.NET Core和Xamarin都共享一個(gè)稱為.NET標(biāo)準(zhǔn)庫(kù)的標(biāo)準(zhǔn)化平臺(tái)
以前的Xamarin和.NET Framework之間是無(wú)法共享二進(jìn)制文件的。隨著.NET標(biāo)準(zhǔn)庫(kù)和通用基礎(chǔ)架構(gòu)的推出,這兩個(gè)框架現(xiàn)在成為統(tǒng)一的.NET生態(tài)系統(tǒng)的一部分。
什么是.NETCore?在上圖中,似乎.NET Core是另一個(gè)包含UWP(通用Windows平臺(tái))和ASP.NET Core的框架。為了使.NET Core成為現(xiàn)實(shí),創(chuàng)建了.NET標(biāo)準(zhǔn)庫(kù)和通用基礎(chǔ)架構(gòu)。
.NETCore的關(guān)鍵功能
.NET Core借鑒了.NET Framework的最佳實(shí)踐,并將軟件工程的最新進(jìn)展結(jié)合在一起。這些是.NET Core的一些顯著特征。
擴(kuò)大您類(lèi)庫(kù)的覆蓋面
使用.NET Core,您可以使用.NET標(biāo)準(zhǔn)庫(kù)編寫(xiě)應(yīng)用程序或庫(kù)。
然后它可以在許多平臺(tái)上共享。
圖2 .NETCore開(kāi)發(fā)
同一個(gè)庫(kù)可以在后臺(tái)服務(wù)“本地”或云中運(yùn)行,也可以在手機(jī),平板電腦或桌面上運(yùn)行的客戶端應(yīng)用程序中運(yùn)行。與其為iOS,Android和Windows構(gòu)建單獨(dú)的應(yīng)用程序,您可以構(gòu)建一個(gè)適用于所有平臺(tái)的應(yīng)用程序。.NET Core是小型和完美的容器,可以輕松擴(kuò)展并縮短開(kāi)發(fā)時(shí)間。
.NET Core和.NET Standard Library建立了一個(gè)通用平臺(tái)。過(guò)去,當(dāng)新版本的操作系統(tǒng)或新設(shè)備出現(xiàn)時(shí),開(kāi)發(fā)人員有責(zé)任重新構(gòu)建新平臺(tái)的應(yīng)用程序或庫(kù),并分發(fā)更新。使用.NET Core,不需要重建和重新分配。只要新的平臺(tái)支持你所有的依賴庫(kù),它就支持你的應(yīng)用程序。
在任何平臺(tái)上簡(jiǎn)單部署
Microsoft產(chǎn)品往往具有復(fù)雜的安裝過(guò)程。COM組件,注冊(cè)表項(xiàng),特殊文件夾,GAC - 都是為了利用Windows的特性而設(shè)計(jì)的。.NET框架依賴于這些構(gòu)造,這使得它不適合其他操作系統(tǒng)。
在發(fā)布依賴于.NET Framework的應(yīng)用程序時(shí),安裝程 序必須足夠聰明才能檢測(cè)是否安裝了錯(cuò)誤的.NET Framework版本,并為用戶提供正確的方法。大多數(shù)現(xiàn)代Windows版本都包含.NET Framework。這使得某些應(yīng)用程序更容易安裝,但是如果應(yīng)用程序使用默認(rèn)情況下未安裝的功能(如ASP.NET與IIS或WCF組件的集成),則可能會(huì)導(dǎo)致復(fù)雜的問(wèn)題。
另一個(gè)復(fù)雜的問(wèn)題來(lái)自補(bǔ)丁。包括錯(cuò)誤修復(fù)或安全更新的修補(bǔ)程序可以通過(guò)Windows更新或通過(guò)Microsoft下載中心分發(fā)給客戶。您測(cè)試應(yīng)用程序的.NET Framework可能與客戶使用的補(bǔ)丁程序不同。當(dāng)您假定.NET Framework對(duì)于所有客戶都是一樣的時(shí)候,通常很難確定在應(yīng)用程序中導(dǎo)致奇怪行為的原因。
.NET Core的模塊化設(shè)計(jì)意味著您只包含所需的依賴關(guān)系。所有這些依賴關(guān)系與您的應(yīng)用程序進(jìn)入相同的文件夾。部署應(yīng)用程序與復(fù)制文件夾一樣簡(jiǎn)單。這種方法的另一個(gè)優(yōu)點(diǎn)是可以有多個(gè)版本并行運(yùn)行。這個(gè)策略對(duì)于使所有平臺(tái)的部署體驗(yàn)保持一致至關(guān)重要。
云和容器
在云系統(tǒng)中,用更少的硬件為更高密度的用戶提供服務(wù)是非常重要的。應(yīng)用程序的占位面積越小,密度越高。虛擬機(jī)已經(jīng)在云端普遍存在多年,但是它們有幾個(gè)問(wèn)題:
- 大小 - 一個(gè)典型的虛擬機(jī)文件是千兆字節(jié),如果不是幾十千兆字節(jié)。這使得它們跨網(wǎng)絡(luò)傳輸非常耗時(shí),并且對(duì)磁盤(pán)空間有很大的要求。
- 啟動(dòng)時(shí)間 - 啟動(dòng)虛擬機(jī)意味著啟動(dòng)操作系統(tǒng)。對(duì)于Windows來(lái)說(shuō),這是一個(gè)挑戰(zhàn),因?yàn)閱?dòng)新機(jī)器需要花費(fèi)時(shí)間。這可以使處理突發(fā)交通困難。
- 內(nèi)存 - 虛擬機(jī)需要將整個(gè)操作系統(tǒng)與應(yīng)用程序一起加載到內(nèi)存中。這意味著很多主機(jī)的內(nèi)存被浪費(fèi)了。
- 不一致性 - 相同的虛擬機(jī)可以復(fù)制到多個(gè)主機(jī),主機(jī)必須提供相同的虛擬化硬件,這可能依賴于物理硬件。無(wú)法保證虛擬機(jī)在任何給定的主機(jī)上運(yùn)行相同的操作。
容器通過(guò)虛擬化操作系統(tǒng)來(lái)解決虛擬機(jī)的問(wèn)題。容器只包含應(yīng)用程序及其依賴項(xiàng)。文件大小要小很多倍,啟動(dòng)時(shí)間以秒為單位,只有應(yīng)用程序加載到內(nèi)存中,容器保證在任何主機(jī)上工作。
內(nèi)置于Windows的.NET Framework不能在容器上運(yùn)行。鑒于容器的明顯優(yōu)勢(shì),.NET Core的設(shè)計(jì)決定之一就是使其成為模塊化。這意味著你的.NETCore應(yīng)用程序可以被“發(fā)布”,使得它和它的所有依賴關(guān)系在一個(gè)地方,這很容易放入容器。
ASP.NET性能
如果您不熟悉ASP.NET,則是.NET Framework中內(nèi)置的Web應(yīng)用程序平臺(tái)。ASP.NET被許多有影響力的組織所使用,包括Stack Overflow還有絕大多數(shù)的可靠性很高的金融證券行業(yè)領(lǐng)域。ASP.NET是2002年發(fā)布的第一個(gè).NET Framework版本,并不斷發(fā)展。盡管ASP.NET取得了成功,但在ASP.NET團(tuán)隊(duì)中卻感覺(jué)到他們正在失去開(kāi)發(fā)人員,因?yàn)锳SP.NET的性能沒(méi)有競(jìng)爭(zhēng)力,只能在Windows平臺(tái)上運(yùn)行。
一家名為T(mén)echEmpower的公司每隔幾個(gè)月就會(huì)運(yùn)行一次Web應(yīng)用程序平臺(tái)的基準(zhǔn)測(cè)試,并提供一個(gè)分為幾類(lèi)的排名。基準(zhǔn)測(cè)試在Linux上運(yùn)行,僅包含Windows平臺(tái)。對(duì)于ASP.NET團(tuán)隊(duì)來(lái)說(shuō),這很麻煩。許多平臺(tái)都用于編寫(xiě)跨平臺(tái)的Web應(yīng)用程序,并且其性能數(shù)據(jù)令人印象深刻。此外,一些Java框架發(fā)布了天文數(shù)字,例如每秒570萬(wàn)個(gè)明文請(qǐng)求,或者490萬(wàn)個(gè)。
圖3 TechEmpower基準(zhǔn),第12輪
在TechEmpower基準(zhǔn)測(cè)試的第十一輪中,Mono平臺(tái)上的ASP.NET MVC被納入測(cè)試。結(jié)果不好。Mono上的ASP.NET每秒產(chǎn)生一個(gè)微小的2000個(gè)明文請(qǐng)求。Mono不是由Microsoft創(chuàng)建的,它不會(huì)像普通的.NET Framework那樣得到相同數(shù)量的性能調(diào)整。為了獲得更公平的比較,ASP.NET團(tuán)隊(duì)決定在與TechEmpower相同的硬件上運(yùn)行.NET 4.6的基準(zhǔn)測(cè)試。結(jié)果是每秒約50,000個(gè)請(qǐng)求。仍然沒(méi)有接近NodeJS(每秒320,000個(gè)請(qǐng)求),或TechEmpower列表上的其他任何頂級(jí)框架。
可憐的低分并不意外。如前所述,ASP.NET知道改變現(xiàn)狀只能通過(guò)重寫(xiě)整個(gè)架構(gòu)來(lái)清除障礙。這正是發(fā)生的事情。
ASP.NET團(tuán)隊(duì)著手構(gòu)建ASP.NET Core,幾個(gè)月后,該團(tuán)隊(duì)?wèi)c祝 core每秒超過(guò)100萬(wàn)個(gè)請(qǐng)求。最新core與node.js的性能對(duì)比更是讓 core的性能優(yōu)勢(shì)繼續(xù)擴(kuò)大
ASP.NET Core VS Node.js
上圖中可看出 core作為復(fù)雜web開(kāi)發(fā)的性能已經(jīng)相較于之前有質(zhì)的提高, ASP.NET Core VS node.js
ASP.NET Core表明了微軟思維的轉(zhuǎn)變。微軟意識(shí)到它必須具有競(jìng)爭(zhēng)力才能贏得開(kāi)發(fā)者。它還必須在Windows以外的平臺(tái)上競(jìng)爭(zhēng)。這是創(chuàng)建.NET Core的原動(dòng)力。
開(kāi)源
現(xiàn)代軟件開(kāi)發(fā)人員并不滿足于尋求功能。當(dāng)已經(jīng)有一個(gè)滿足他們需求的開(kāi)源項(xiàng)目的時(shí)候,尤其如此。當(dāng)大公司熱衷于開(kāi)源軟件時(shí),即使是最忠實(shí)的微軟開(kāi)發(fā)者也會(huì)轉(zhuǎn)向其他框架和庫(kù),以便在預(yù)算內(nèi)按時(shí)完成自己的項(xiàng)目。如果微軟關(guān)心“開(kāi)發(fā)人員,他們必須做出改變。
公開(kāi).NET Framework的源代碼是第一步。.NET Framework源代碼已經(jīng)在referencesource.microsoft.com 和GitHub上公開(kāi)了好幾年了。
圖4 .NET Framework參考源
從單獨(dú)的開(kāi)源代碼到接受外來(lái)的貢獻(xiàn)是完全不同的。.NET Core開(kāi)發(fā)人員不僅希望獲得外部貢獻(xiàn),還希望將社區(qū)納入設(shè)計(jì)和開(kāi)發(fā)。這導(dǎo)致了更多的透明度。ASP.NET Core團(tuán)隊(duì)每周都會(huì)在http://live.上舉行一次社區(qū)直播會(huì)議。.NET Core的代碼從一開(kāi)始就在GitHub上公開(kāi),任何人都可以提出請(qǐng)求。社區(qū)成員可以在GitHub中創(chuàng)建錯(cuò)誤和功能。.NET Core已經(jīng)標(biāo)志著微軟在開(kāi)源方面的重大轉(zhuǎn)變。
與.NET Framework的差異
.NET Core不僅是Linux和Mac的.NET Framework。微軟并沒(méi)有移植所有的.NET Framework,對(duì)于ASP.NET客戶來(lái)說(shuō),ASP.NET團(tuán)隊(duì)是.NET Core的驅(qū)動(dòng)因素。MVC,Web API和SignalR都可以在.NET Core中找到,或者在路線圖上。
框架功能沒(méi)有移植到.NETCore
我給這個(gè)列表提供了可以改變的知識(shí)。某些功能不適用于非Windows平臺(tái),其他某些功能也將不會(huì)由Microsoft在將來(lái)推出,因?yàn)橛懈玫奶鎿Q或功能在某些方面有問(wèn)題(不安全,難以維護(hù)等 )。
- WPF / XAML - Windows Presentation Foundation僅適用于用戶界面。.NET標(biāo)準(zhǔn)庫(kù)不包括用戶界面庫(kù),.NET Core不會(huì)提供跨平臺(tái)的UI框架。這意味著像Windows窗體和系統(tǒng)的東西。繪圖不會(huì)移植到.NET Core。
- 事務(wù) - 這個(gè)庫(kù)使創(chuàng)建分布式事務(wù)變得容易。它依賴于特定于Windows的組件,使其不易移植到.NET Core。
- AppDomains - 這些對(duì)于隔離程序集來(lái)說(shuō)是非常有用的,而且不會(huì)終止進(jìn)程,這對(duì)于允許插件的應(yīng)用程序來(lái)說(shuō)非常有用。它們依賴于某些Windows特定的構(gòu)造,這些構(gòu)造在其他操作系統(tǒng)上不起作用。
- .NET遠(yuǎn)程處理 - 遠(yuǎn)程對(duì)象已被REST服務(wù)成功。
- ASMX - 編寫(xiě)已被Web API取代的Web服務(wù)的舊方法。
- Linq to SQL - 由實(shí)體框架取代。
- WCF服務(wù) - Windows Communication Foundation客戶端功能在.NET Core中可用,但不能創(chuàng)建服務(wù)。
- WF - Windows Workflow Foundation依賴于XAML,WCF服務(wù)以及其他.NET Framework特性之間的事務(wù)。
.NET Framework開(kāi)發(fā)人員的微妙變化
有經(jīng)驗(yàn)的.NET Framework開(kāi)發(fā)人員可能會(huì)在.NET Core中遇到一些驚喜。編寫(xiě)新的代碼應(yīng)該是相對(duì)直接的,因?yàn)槟悴惶赡苁褂孟?/span>HashTable
or 這樣的舊的結(jié)構(gòu)ArrayList
。Visual Studio的Intellisense也指出.NET Core是否支持類(lèi)型,方法,屬性等。
圖5 Visual Studio IntelliSense指示.NET Core中是否有類(lèi)或成員可用
。NET可移植性分析器
如果您試圖將現(xiàn)有的.NET應(yīng)用程序轉(zhuǎn)換為.NET Core,那么最好的地方就是.NET可移植性分析器。它既可以作為命令行應(yīng)用程序,也可以作為Visual Studio插件使用。有許多.NET平臺(tái)可供選擇:
圖6 .NET可移植性分析器中提供的目標(biāo)平臺(tái)
盡可能使用此工具創(chuàng)建一個(gè)詳細(xì)的報(bào)告,提供有用的建議:
圖7。.NET可移植性分析器報(bào)告
反射
.NET Core中的反射工作方式與.NET Framework中的不同。最明顯的區(qū)別是,Type類(lèi)
上正常的許多操作不再存在。有些人已經(jīng)被調(diào)到一個(gè)新的TypeInfo類(lèi)
。其他操作在.NET標(biāo)準(zhǔn)庫(kù)中不可用,并且需要額外的依賴性。
.NET Framework實(shí)現(xiàn)反射
.NET Framework實(shí)現(xiàn)反射 PropertyInfo targetProperty = null; foreach (var property in owningElement.GetType().GetProperties()) { if (property.Name == this.Name && property.PropertyType.IsGenericType) {
The .NET Core 實(shí)現(xiàn)反射.
PropertyInfo targetProperty = null; foreach (var property in owningElement.GetType().GetProperties()) { if (property.Name == this.Name && property.PropertyType .GetTypeInfo().IsGenericType) {
?需要依賴于System.Reflection.TypeExtensions
? 許多類(lèi)型操作移到了TypeInfo
概要
軟件開(kāi)發(fā)行業(yè)正在不斷發(fā)展。從語(yǔ)言到框架,工具到方法論,一切都受到挑戰(zhàn)和改進(jìn)。.NET框架已經(jīng)到了不得不做出改變的時(shí)候,以跟上競(jìng)爭(zhēng)對(duì)手。.NETCore是.NET演進(jìn)過(guò)程中必不可少的一步。它將最好的.NET Framework與現(xiàn)代軟件開(kāi)發(fā)中使用的實(shí)踐相結(jié)合。諸如可移植性,簡(jiǎn)單部署,高性能,開(kāi)放源代碼和強(qiáng)大支持等特性使其值得一試。
以上數(shù)據(jù)是.NETCore2.0數(shù)據(jù),最新穩(wěn)定版本是2.1.300,性能在2.0基礎(chǔ)上又大幅提升,具體詳情請(qǐng)Google
推薦免費(fèi)高質(zhì)量微服務(wù)書(shū)籍:.NET微服務(wù) 容器化.NET應(yīng)用架構(gòu)指南
.NET Core介紹 (PDF) https://files.cnblogs.com/files/xiaoliangge/NETCore-chaunce.pdf(可用于公司.netcore分享ppt使用)