.NET程序是基于.NET Framework、.NET Core、Mono、.NET實(shí)現(xiàn)開發(fā)和運(yùn)行的 ,定義以上.NET實(shí)現(xiàn)的標(biāo)準(zhǔn)規(guī)范稱為.NET Standard。 L1:.NET Standard.NET標(biāo)準(zhǔn)是一組API集合,由上層三種【.NET實(shí)現(xiàn)】的Basic Class Library實(shí)現(xiàn),更正式的說法,由統(tǒng)一契約集合構(gòu)成的規(guī)范,這個集合確保了在不同【.NET實(shí)現(xiàn)】之間的可移植性,能讓你的代碼 run everywhere。 .NET Standard 也是一個 target framework。 如果您的代碼針對的是.NET Standard的一個版本,那它可以在任意一個 支持該.NET Standard版本的.NET實(shí)現(xiàn)上運(yùn)行。 L2:[.NET實(shí)現(xiàn)]上圖給出的是微軟積極支持和維護(hù)的有三個主要的【.NET實(shí)現(xiàn)】:.NET Framework,.NET Core,Mono 1、.NET Framework 最早期的.NET 實(shí)現(xiàn), 4.5+版本開始實(shí)現(xiàn).NET Standard https://docs.microsoft.com/en-us/dotnet/standard/net-standard https://docs.microsoft.com/en-us/dotnet/standard/frameworks 早期的微軟比較閉源,.NET Framework 是為構(gòu)建面向windows桌面環(huán)境而設(shè)計(jì)的,針對不同的應(yīng)用程序形態(tài)設(shè)計(jì)了 WINFORM、 ASP.NET、WPF 2、.NET Core 是近幾年微軟擁抱開源的結(jié)晶,.NET Core是一個跨平臺的【.NET實(shí)現(xiàn)】,因?yàn)樵鷮?shí)現(xiàn)了.NET Standard(完全沒有版本包袱), 面向.NET Standard的代碼可以在.NET Core平臺上編譯和運(yùn)行。 針對Web程序.NET Core準(zhǔn)備了ASP.NE Core框架, 定位是微軟新一代高性能、開源、跨平臺Web開發(fā)框架, 目前最新穩(wěn)定版本為2.2 另外.NET Core 3.0即將支持WINFORM、WPF, 這樣將全面覆蓋.Net Framework 支持的應(yīng)用程序形態(tài)。 3、Mono 是一個微小運(yùn)行時的 【.NET實(shí)現(xiàn)】,驅(qū)動 Xamarin,用于android,ios 等開發(fā),支持目前所有公開的.NET standard 版本。 本人近些年工作在.NET Core平臺, 有一些宏觀上的經(jīng)驗(yàn)之談, 可供參考。 一、.NET Core部署目標(biāo)的選擇部署目標(biāo)是在Target Framework Moniker中定義, 決定了程序的部署定位, 常見有如下2種:
在實(shí)踐中:項(xiàng)目早期可能是定位是 netstandard,后面隨著項(xiàng)目演進(jìn),依賴的庫越來越多,大部分都會變成netcoreapp. 如L1所述 .NetStandard也是一個 target framework, 期望在多個運(yùn)行時(.Net Framework4.5+,.NET Core, XAMARIN)上都能運(yùn)作的程序應(yīng)該以此框架為目標(biāo)。 <Project Sdk='Microsoft.NET.Sdk'> 伴隨項(xiàng)目演進(jìn), 程序依賴的某些庫可能只有針對 .NET Core的版本;從生產(chǎn)實(shí)際看, 部署環(huán)境只會搭配一套.NET Core運(yùn)行時, 所以后期項(xiàng)目很大可能性會演進(jìn)成針對 .NET Core的運(yùn)行時部署。
二、開發(fā)環(huán)境存在多SDK、多Runtime版本時,應(yīng)當(dāng)知曉 .NET Core工具、SDK和運(yùn)行時版本選擇的策略。 ① 當(dāng)運(yùn)行SDK命令,會使用安裝的最新版本命令 SDK命令包括dotnet new/ dotnet run,即使項(xiàng)目生成文件被指定為早期版本的運(yùn)行時 或 安裝的最新版本SDK是預(yù)覽版, SDK依舊使用安裝的最新SDK版本 ② 目標(biāo)框架標(biāo)記target framework monikers定義編譯時刻的API 編譯.NET Core程序的API是在項(xiàng)目文件的 Target framework Moniker中定義的, <TargetFramework>netcoreapp2.0</TargetFramework> ③ 運(yùn)行.NET Core程序( 框架獨(dú)立的.NET Core 程序 ), 在部署服務(wù)器上會適用版本前滾的策略 在項(xiàng)目文件中指定了netcoreapp2.0, 在部署環(huán)境中2.0.4 是安裝的最新運(yùn)行時版本, 那么就會使用2.0.4運(yùn)行時版本 ④ 發(fā)布自包含的程序,自包含的部署文件會內(nèi)置指定的運(yùn)行時 部署自包含.NET Core 程序時, 部署文件包含了.NET Core 運(yùn)行時和程序依賴的庫文件,自包含項(xiàng)目并不依賴 部署服務(wù)器上運(yùn)行時環(huán)境,運(yùn)行時版本選擇發(fā)生在發(fā)布階段,而不是在運(yùn)行階段。 目前 自包含.NET Core程序使用場景不多,一般用于需要將程序應(yīng)用到復(fù)雜的多種客戶環(huán)境中,這種部署方式可將運(yùn)行時和依賴環(huán)境打包,不用去提前知曉客戶服務(wù)器運(yùn)行時。 Tip:針對策略①有些特殊應(yīng)用場景,如果項(xiàng)目需要使用早期的SDK版本,可在global.json文件中指定該早期版本,規(guī)避最新策略
本文沒有大篇幅講解 .NET Core SDK和CommandLine的用法,照葫蘆畫瓢即可,特別指出 部署目標(biāo)的設(shè)定策略、服務(wù)器存在多SDK的選擇策略, 讀者可參照對比心中有數(shù)。 ●編號343,輸入編號直達(dá)本文 ●輸入m獲取文章目錄 |
|