.NET Core

什麼是 .NET Core

如同 2016/06/27 .NET 官方部落格 Announcing .NET Core 1.0 一文中提到的:

We are excited to announce the release of .NET Core 1.0, ASP. NET Core 1.0 and Entity Framework Core 1.0, available on Windows, OS X and Linux! .NET Core is a cross-platform, open source, and modular .NET platform for creating modern web apps, microservices, libraries and console applications.

不像 .NET Framework 只能在 windows 下使用 (透過 Mono 在 Linux 下的體驗並不好),.NET Core 是微軟開發的第一個跨平台 (Windows、Mac OSX、Linux) 的應用程式開發框架,也是微軟在一開始發展時就開源的軟體平台。

.NET Core 具備有以下幾個特性:

  • 彈性的部署︰自服務特性,不綁定特定伺服器,不只在 IIS 上可執行。可以在多樣環境及機器上都可安裝執行,個人電腦、伺服器、雲端、Docker。
  • 跨平台︰Windows、macOS 及 Linux 上都可執行,也可以移轉到其他作業系統。
  • 命令列工具︰專案的建立、執行、部署都可以在命令列操作。
  • 相容性︰.NET Core 透過 .NET Standard Library (.NET 標準程式庫) 與 .NET Framework、Xamarin 及 Mono 相容。
  • 開放原始碼︰.NET Core 平台是開放原始碼,使用 MIT 和 Apache 2 授權。.NET Core 是 .NET Foundation 專案。
  • 受 Microsoft 支援。

到 2.0 才可以用?

.NET Core 雖然有了很多美好的特性,但 1.x 版的 .NET Core 只適合個人拿來學學和玩玩,不適合企業拿來用,因為它還少了穩定性及支援性。

穩定性問題,倒不是說跑了會當,而是架構的穩定性。這段時期整個規格都還在調整中,連專案檔都從流行的 project.json 改回以 MSBuild 為主的 csproj。

架構及設定的變化都還可以調的過去,還不是大問題,API 支援的不足才是大問題。API 支援的不足,舊專案要移植到 .NET Core 上是不可能的,套件的相容也是大問題。

準備就緒的 2.0

在 .NET Standard 2.0 的支持下,API surface 的數量從 13000 增加到 32000,大部份是現有的 .NET Framework API 所移植過去,很多原本支援不足的功能都被補上了,像是 serialization、threading、sockets、reflection、Linq 等等。可以試著把舊專案移植到 .NET Core 上,看看現在 .NET Core 是否已經符合相容需求了或是要再觀望。

.NET Framework 4.7.1

.NET Framework 4.7.1 的重大特徵之一就是內建對 .NET Standard 2.0 的完整支援。.NET Framework 4.6.1 到 4.7 雖說是相容,但在 Visual Studio 2015 下要安裝額外的 支援檔 才能達到效果。

.NET Core 時代

.NET Future

新 .NET 時代,起到統整效果的,就是 .NET Standard 的引入。

.NET Standard

它基本上是一系列的 API 規格,來要求每個平台在不同的版本下需要實做出哪些 API。表示說,開發的系統如果依照 .NET Standard 來做開發,將可確保具備跨平台的執行能力。因此,它也被列在應用程式的 Target Framework 設定值中。

下表為各版本平台對 .NET Standard 的相容
.NET Standard compatibility

.NET Core 組成

  • .NET Core Runtime (CoreCLR) - 提供類別系統、組件載入、記憶體回收行程、原生 Interop 及其他基本服務。
  • Framework 程式庫 - 提供基本資料類型、應用程式組合類型及基本的公用程式。
  • SDK 工具組及編譯器 (RyuJIT 及 Roslyn) - 提供基本的開發人員功能,可在 .NET Core SDK 中取得。
  • dotnet 應用程式環境 - 用來啟動 .NET Core 應用程式。它會選取並裝載適當的 Runtime、載入組件,然後啟動應用程式。

Target frameworks

應用程式或類別庫的開發都要指定 target frameworks,用來確立程式依循 的 API 規範。指定方式,則是設定版本的 Target Framework Moniker (TFM)。

2 種 target

  • .NET Standard – 提供跨平台的功能,如:netstandard2.0
  • 特定的 .NET 實作 – 以存取特定的 API,如:net471

可以依專案屬性,選擇跨平台的 .NET Standard,或是特定平台功能的 .NET Framework、.NET Core 或 Xamarin。

最新版本

latest tfm

主要的 TFM

Supported target framework

.NET Core CLI 快速體驗

安裝

下載並安裝 .NET Core SDK - All .NET Core downloads

進入後依作業系統選擇左邊的 Download .NET Core 2.x.x SDK 做下載。

要確認是否安裝成功,請開啟命令提示字元,輸入下列命令:

1
dotnet --info

會顯示以下內容:

1
2
.NET 命令列工具 (2.0.2)

主控台應用程式

進到工作目錄並開啟命令提示字元,輸入下列命令:

建立專案

1
dotnet new console

會建立 [工作目錄名].csproj 專案檔。也會建立包含了應用程式的進入點的 Program.cs。

還原相依套件

1
dotnet restore

呼叫 NuGet,以還原相依性的樹狀結構。
dotnet new 執行後會自動接著執行 dotnet restore。

執行專案

1
dotnet run

先呼叫 dotnet build 做建置,再呼叫 dotnet <assembly.dll> 執行應用程式。

執行結果如下:

1
2
> dotnet run
Hello World!

就是這麼容易!

.NET Core 2.x CLI 命令說明

結語

.NET Core 帶來 .NET 未來十年應用程式開發的新環境,而 2.0 版的推出讓它的實用性大大提供,近來文章分享也都集中在 .NET Core 上,現在是學習及試應用的最好時機點。

參考資料及圖片來源

  1. .NET 指南
  2. .NET Core 指南
  3. Announcing the .NET Framework 4.7.1