[.NET Core].NET Core簡介

  • 856
  • 0
  • 2016-03-05

摘要:[.NET Core].NET Core簡介

這是自己翻譯ASP.NET官方文件-Introducing .NET Core,作為參考之用。並不是準確的翻譯,而是用自己看得懂的方式翻譯。如果有差異,請以官方Introducing .NET Core為準。

甚麼是.NET Core

.NET Core是一個模組化的執行環境(runtime),它包含了.NET Framework的功能的子集合。.NET Core目前在Windows 平台上具備了完整的功能,而在LinuxOS X 這兩個平台上的功能,則還在繼續開發中。.NET Core包含了一組libraries ,就是所謂的CoreFX(.NET Core Libraries)。這兩個專案都是open-source,可以在GitHub上找到。

透過NuGet,可以取得CoreCLR與CoreFX。CoreFX 其實是許多packages的組合,可依據需要的功能,在nuget.org中找尋System.[module] 。.NET Core的好處之一是,它不再綁定特定的.NET Framework的版本。你可以在一台電腦上同時掛載(host)不同CoreCLR版本的Web Application,而且還可以個別的去更新Web Application的CoreCLR的版本,而不會互相影響。

為了減低dependency造成的問題,CoreFX被設計成建立成較為內聚的元件。這樣的方式,讓application可以使用最少量的library來達成目標。CoreFX包含了ollections, console access, diagnostics, IO, LINQ, JSON, XML。另一個好處是,即使在不同的作業系統平台,developer面對的仍是同一套library。

Motivation Behind .NET Core

當.NET出現在2002年的時候,它只是一個單一的Framework,它並沒有辦法處理mobile設備,這個功能則是由.NET Compact Fraemwork負責。這種方式延續了幾年,因此造就了不同的.NET版本支援不同的平台及設備。因此,Mono及Xamarin的出現,用來支援Linux, Mac, native iOS, 以及Android設備。但這麼一來,不同的平台上,就會有不同的runtime, framework以及app model用以開發.NET 程式。所以,NET Core的一個主要的目標,就是提供一個單一的,模組化的跨平台 .NET。因為.NET Core是一個open-source的專案,Mono社群也可以貢獻他們的力量在.NET Core上。

除了跨平台跨設備的目的外,Server端程式也可以因為.NET Core的模組化特性,只使用必要的Library,因此降低了更新patch的頻率,也降低了影響Application的機會。一個附帶的好處是,通常Application的部署檔案會更小。

整個.NET Core的檔案大小並不會比.NET Framework還小,但因為是採用pay-for-play,也就是用到才安裝的模式,所以大部分的Application只會使用到一部分的.NET Core功能,因此相較於使用.NET Framework,部署系統可以有更小的安裝檔。

Building Applications with .NET Core

.NET Core不只可以用來建立Web Application, Console Application以及 Native Mobile Appplication,還因為底層建構在.NET Execution Environment (DNX) 上,所以可以執行在不同的作業系統平台:Windows, Mac and Linux。在DNX 上,可以選擇使用.NET Framework或是.NET Core。實際上,DNX 專案可以同時編譯成指向(target)這兩個.NET,這也就是使用VS2015建立專案時一開始的設定方式。這由project.json這個設定檔中的frameworks區塊就可以看到,預設是指向 dnx451 以及 dnxcore50

"frameworks": {
        "dnx451": { },
        "dnxcore50": { }
},

dnx451 表示 .NET Frameworkdnxcore50 則表示 .NET Core 5 (5.0)。可以使用 compiler directives (#if) 來處理只有在.NET Framework才有的功能。如以下程式碼所示:

#if DNX451
        // 使用 .NET Framework中才有的功能
#endif

ASP.NET team的建議是在新專案中設定為同時指向兩個Framework,再依據自己所需移除不需要的那個。而ASP.NET 4.6以及更早的版本,都還是需要.NET Framework。

.NET Core and NuGet

使用NuGet可以讓我們用更敏捷的方式使用.NET Core中各個獨立的library,而且在處理third-party元件的dependency的時候,可以更方便。因為third-party元件可以用更小,更精準的方式使用.NET Core library,讓我們也可以更簡單方便的決定哪些是合適的package,以及合適的版本。這在程式開發以及建構的流程中,都可以帶來很大的助益。

例如,如果需要使用immutable collections,可以透過NuGet只安裝System.Collections.Immutable package。NuGet的版本號遵守這個規範-semantic versioning.


參考