【轉】.NET Core全面掃盲貼

轉自:http://www.cnblogs.com/Wddpct/p/5694596.htmlcss

 


 

1. 前言

.NET發行至今已通過了十四個年頭。隨着版本的不斷迭代更新,.NET在Windows平臺上的表現也是愈來愈好,能夠說Windows平臺上全部的應用類型.NET幾乎都能完成。html

只是成也Windows,敗也Windows,這十四年來,除了部分「民間」版本,.NET一直沒能在官方支持下襬脫Windows平臺的侷限,「開源」和「跨平臺」這兩個詞語也是全部.NET開發者心中的痛楚。最終,.NET Core出現了,它讓開發者們在官方和社區的支持走出了Windows,能夠在macOS,Linux主流distributions上編寫調試並部署.NET程序。git

 

2. .NET Core 簡介

 

 

2.1 .NET Core是什麼

 

.NET Core是一個開源通用的開發框架,支持跨平臺,即支持在Window,macOS,Linux等系統上的開發和部署,而且能夠在硬件設備,雲服務,和嵌入式/物聯網方案中進行使用。.NET Core的源碼放在GitHub上,由微軟官方和社區共同支持。github

它和傳統的.NET Framework,屬於「子集—超集」的關係,或者你也能夠簡單地認爲它就是.NET Framework的跨平臺版本(基於BCL的層面上看)。這是由於在當前版本中(1.0),.NET Core中的大部分核心代碼都是從.NET Framework中繼承重寫的,包括Runtime和Libraries(如GC, JIT, 部分類型)。sql

吐槽:只能感謝微軟《CLR via C#》不用白看呀,我以前看了得有小半年纔看完編程

如今的.NET Core 1.0版本是一個很小的核心,APIs和工具也並不完整,可是隨着.Net Core的不斷完善,補充的Apis和創新也會一塊兒整合到.NET Framework中。也就是說,.NET Core微軟會同時更新.NET Framework和.NET Core,他們就像倆兄弟,共同努力致富(致誰的富?固然是.NET開發者們),實現所謂的天下大同,也就是.NET 標準2.0json

這裏不得不提到一個叫作.NET Standard Library概念。做爲.NET平臺APIs開發官方支持標準,它要求全部的.NET框架APIs都遵循向下兼容。好比說.NET Framwork 4.6支持.NET Standard Library 1.3,.NET Framwork 4.6.2框架支持.NET Standard Library 1.5,而.NET Core 1.0框架支持1.6標準。windows

最終展望以下:
centos

 

2.2 .NET Core的組成

 

  • .NET Runtime
    CoreCLR。如以前所說,CoreCLR與.NET Framework的CLR並無什麼區別,進程管理,GC,JIT(RyuJIT 編譯器)這些部分也都是同樣的,只是針對服務器系統作了相應優化。如今CLR和CoreCLR也在進行同步更新,只是能夠確定的是,CoreCLR纔是.NET的將來,CLR將做爲兼容手段而存在bash

  • Framework Libraries,
    CoreFX。包括集合類,文件系統處理類,XML處理類,異步Task類等

  • SDK Tools 和 Language Compilers (SDK工具和編譯器)
    CLI工具和Roslyn編譯器。能夠經過.NET Core SDK(.NET Core開發工具包)獲取。

  • dotnet’app host
    用來選取並執行對應運行時,提供組件載入原則和啓動.NET Core應用程序。SDK也是經過相同程序啓動。

    Tips:是否是想起了MSCorEE.dll這個墊片,它一樣承載着Windows平臺上爲.NET應用程序選擇CLR版本的工做

 

2.3 .NET Core的特性

 

  • 跨平臺
    能夠在Windows,macOS,Linux上運行

  • 靈活的部署機制

1.Portable applications(便攜式應用)
這種部署機制和傳統的.NET Framework類似,只要目標平臺上存在.NET Core Runtime便可。

2.Self-contained application(自宿主應用)
顧名思義,這種部署機制將應用和運行時共同打包,即使目標平臺上沒有安裝.NET Core Runtime也能正常使用

第二種方式和.NET Native也是不同的,仍然使用CoreCLR,而.NET Native使用CoreRT做爲運行時,詳細信息請見dotnet/corert

  • 命令行工具
    .NET程序全部的運行腳本均可以用命令行工具執行(cmd,bash)這裏有幾個常見的donnet命令
指令 幫助
dotnet new 產生新的基本 .NET 項目內容 (包含 project.json、Program.cs 以及 NuGet.config
dotnet restore 還原所參考的 NuGet 包
dotnet build 建造 .NET 項目
dotnet publish 產生可發行的 .NET 項目 (包含所屬的 Runtime)
dotnet run 編譯與當即運行 .NET 項目 (較適用於 exe 型項目)
dotnet repl 引導交互式的對話
dotnet pack 將項目的產出封裝成 NuGet 包
  • 兼容性
    經過.NET Standard Library與.NET Framework,Xamarin,Mono兼容

  • 開源
    .NET Core從屬於.NET基金會,由微軟進行官方支持。使用MIT和Apache 2開源協議,文檔協議遵循CC-BY

 

2.4 開發語言

 

.NET Core 1.0版本中支持的編程語言僅有C#(F#和VB暫未實現),這裏還要提到一個開源的語言編譯器Roslyn,它負責將代碼編譯成咱們熟悉的IL語言,而後再借由AOT或JIT編譯器編譯成機器熟悉的機器語言。

 

3. Get Started

 

如下內容演示在Windows10和CentOS 7.2下的命令行生成和發佈demo

 

3.1 Win 10

 

 

3.1.1 安裝.NET Core SDK.NET Core Runtime

 

.NET Core SDK = 使用.NET Core開發應用.NET Core Runtime 和 SDK+CLI 工具

 

3.1.2 簡單的運行結果

 

打開cmd,依次輸入mkdir .project(建立目錄),cd .\.project(進入目錄),dotnet new(新建初始項目),dotnet restore(還原依賴),dotnet run(運行)便可運行第一個Hello World程序

 

3.2 CentOS 7.2(本地Hyper-V)

 

 

3.2.1 安裝和運行

 

詳情請見:.NET Core in CentOS,大體命令以下

sudo yum install libunwind libicu #安裝libunwind,libicu包 curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=809131 #下載dotnet-dev-centos-x64.1.0.0-preview2-003121.tar文件,有時會由於網絡問題下載較慢,耐心等待便可,固然也能夠手動下載後放到目錄下。 sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet #建立目錄並解壓已下載文件 sudo ln -s /opt/dotnet/dotnet /usr/local/bin #將目錄連接到$PATH下,不然dotnet命令沒法識別 mkdir hwapp cd hwapp dotnet new #建立默認.NET Core應用 dotnet restore #還原依賴包 dotnet run #運行,結果將顯示Hello World!

第六行命令後可以使用dotnet --info查看是否連接成功,顯示以下

.NET Command Line Tools (1.0.0-preview2-003121) Product Information: Version: 1.0.0-preview2-003121 Commit SHA-1 hash: 1e9d529bc5 Runtime Environment: OS Name: centos OS Version: 7 OS Platform: Linux RID: centos.7-x64

以上步驟在.NET Core官方網站均可以找到,能夠看到應用在通過簡單的dotnet newdotnet restoredotnet run命令後就跑起來了,可是這實際上是相似於開發環境中的調試運行,並且win上new的應用此時也不能直接跨平臺到Linux下運行,因此咱們又得提到dotnet publish命令了

 

3.2.2 Self-contained applications 發佈

 

 

(1) 修改project.json文件

 

咱們如今win10下按照步驟new一個新的HW控制檯應用self,按照官方文檔要求,咱們須要用如下內容替換原來project.json文件(刪除"type": "platform",並增長runtimes節點)

{
  "version": "1.0.0-*", "buildOptions": { "debugType": "portable", "emitEntryPoint": true }, "dependencies": {}, "frameworks": { "netcoreapp1.0": { "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.0" } }, "imports": "dnxcore50" } }, "runtimes":{ "win10-x64":{}, #win10平臺 "centos.7-x64":{} #centos7.2平臺 } }

 

(2) 執行restore和publish操做

 

以後執行dotnet restore指令,針對平臺進行還原操做。該步操做耗時較久,雖然只是兩個平臺,第一次也花了較長時間。緊接着進行進行dotnet publish -r centos.7-x64 -c release

dotnet publish指令詳見dotnet-publish - Packs the application and all of its dependencies into a folder getting it ready for publishing

 

(3) 在Linux平臺上運行

 

上述操做後,咱們只須要將發佈後的文件夾(bin/release/netcoreapp1.0/centos7-x64/publish,包含self.exe)上傳到Linux root目錄下project(新建)文件夾中, 在Shell中輸入指令

修改可執行權限後,便可成功運行「Hello World」,這就是咱們「Self-contained applications」方式的部署方法

 

4. 總結

 

 

4.1 尾聲

 

至此,.NET Core的學習便告一段落了,以上內容簡單介紹了.NET Core的組成和特性,同時也在Windows和Linux系統上經過兩種不一樣的部署方式成功運行了示例。相比較以前的.NET Framework傻瓜式部署,.NET Core的新奇真是讓我眼前一亮。接下來,我也會將.NET Core和ASP.NET Core的學習記錄下來,歡迎指正。

 

4.2 相關學習資料

 

 

5. 參考資料

 

相關文章
相關標籤/搜索