C# 獨(dú)立的部署模型
完整的.NETFramework最常被安裝到將運(yùn)行開發(fā)人員創(chuàng)建的程序的計(jì)算機(jī)或服務(wù)器上。這么做的一個(gè)好處是,只需要安裝框架一次,所有應(yīng)用程序就可以根據(jù)需要引用和使用該框架,從而節(jié)省本地存儲(chǔ)空間。但是,有可能發(fā)生這樣一種不期望遇到的場(chǎng)景:所有的應(yīng)用程序引用相同的框架程序集,但是程序集被意外更新,破壞了一些代碼功能。
對(duì)于完整的.NETFrameworic,有兩種差別很大的升級(jí)類型:并行和就地升級(jí)。并行升級(jí)代表主版本的變化。例如,安裝.NETFramework2.0和.NETFramework4.0可支持基于2.0或4.0版本的程序。當(dāng)CLR和框架組件發(fā)生重要修改或優(yōu)化時(shí),可能出現(xiàn)這種情形。如果一個(gè)程序面向.NET Framework 2.0,但是安裝的是.NET Framework 4.0,那么產(chǎn)生影響的風(fēng)險(xiǎn)很小,因?yàn)檫@兩個(gè)版本是并行安裝的。與之相對(duì),就地升級(jí)(例如從.NET Framework 4.5升級(jí)到.NET Framework 4.6.2),則可能包含對(duì)mscorlib.dll和其他.NET程序集的修改,而當(dāng)程序 面向.NETFramework 4.x時(shí),是需要運(yùn)行這些文件的。
.NET Core通過(guò)實(shí)現(xiàn)獨(dú)立性(也稱為應(yīng)用程序本地框架)解決了這個(gè)問(wèn)題。應(yīng)用程序本地框架的含義是,程序內(nèi)引用的程序集與模塊或可執(zhí)行文件包含在一起,當(dāng)部署程序后,程序包含運(yùn)行時(shí)需要的所有程序集(運(yùn)行庫(kù)、編譯器和引用的框架組件)。程序不再依賴于在機(jī)器范圍內(nèi)安裝的任何.NET Framework,對(duì)機(jī)器范圍內(nèi)的.NET Frameworic版本所做的任何并行或就地修改,不會(huì)影響.NET Core程序。最后,因?yàn)槌绦蚣苄?、很?jiǎn)潔(如針對(duì)云優(yōu)化),所以占用的本地存儲(chǔ)空間有限。
這意味著對(duì)于開發(fā)人員和公司來(lái)說(shuō),當(dāng)交付產(chǎn)品后,他們可以確信即使在計(jì)算機(jī)或服務(wù)器上升級(jí)框架,程序也仍將繼續(xù)工作。在過(guò)去,當(dāng)發(fā)生破壞性升級(jí)后,開發(fā)人員和IT支持人員要參加問(wèn)題升級(jí)會(huì)議,在危機(jī)狀態(tài)下解決程序無(wú)法繼續(xù)運(yùn)行的問(wèn)題。在企業(yè)中,這是非常復(fù)雜的情形,因?yàn)樾〗M、團(tuán)隊(duì)和流程要想修改生產(chǎn)環(huán)境,
需要獲得許多人的同意和批準(zhǔn)。常見的做法是,當(dāng)開發(fā)完成后,代碼所有權(quán)就轉(zhuǎn)交給支持團(tuán)隊(duì),而這就是問(wèn)題變得復(fù)雜和需要獲得批準(zhǔn)的根源所在。這些限制使得問(wèn)題更具挑戰(zhàn)性。
而選擇.NET Core作為框架時(shí),這種危機(jī)場(chǎng)景將不會(huì)發(fā)生。相反,升級(jí)只在應(yīng)用程序級(jí)別進(jìn)行,在升級(jí)之前,可先進(jìn)行大量的開發(fā)、集成和性能測(cè)試。如果升級(jí)到新的程序集版本時(shí),在開發(fā)周期中發(fā)現(xiàn)了問(wèn)題,開發(fā)人員和公司可決定采取什么行動(dòng)。在開發(fā)環(huán)境中決定升級(jí)代碼來(lái)支持新版本,或者回滾到升級(jí)前能良好工作的版本,要比在生產(chǎn)危機(jī)情形下做決定更容易。
點(diǎn)擊加載更多評(píng)論>>