# [Day 1]NET Core definition & Hellow Word ## 本篇重點 > 介紹 .NET Core和 .NET Framework 差異 > 說明 .NET Core 的各種專案方式及差異 > 千年不變 Hello Word - Razor Pages篇 ## 前言 以前大部分的經驗都還停留在 .NET webform. 如今 .NET Core 也來到了3.1版 這次決定直接上 .NET Core,趁這個機會來點一下技能樹 以下是這30天預計的範圍(會依照撰寫的狀況是情況調整): - Day 1 - Day 2: 概略性的介紹 .NET Core,又可分成哪些專案,示範Hello World - Day 3 - Day 8: .NET Core 基本的運作整理 - Day 9 - Day 16: ASP .NET Core MVC - Day 17 - Day 21: Entity Framework Core - Day 22 - Day 28: 實際做一個小專案 使用 .NET Core - Day 29 - Day 30: 示範其他專案類型的CRUD ----- ## What is the ASP .NET Core ASP .NET Core 現行已經來到了3.X版 是微軟設計新一代跨平台的 .NET 平台 使用的語言為C# 以下針對 .NET Core vs .NET Framework 兩大平台去做比較整理: | 差異 | ASP .NET Core | ASP .NET | | -------- | -------- | -------- | | 平台開放 | 真正支援跨平台(windows/linux/MacOS) | 只能運行在windoes | | 開放原始碼 | Open Source | 大部分是不開放原始碼的 | | 執行的CLR(註1) | 使用CoreCLR| CLR| | 使用時機 | 更輕量,使用資源較少,較符合Microservice或使用Container| 仍以windows 為主要的服務平台| | 處理回應及要求 | 提供Middleware Components管理| 使用 Handlers and Modules| |server| IIS, Apache…等| 只限IIS| |有無Cli| 有(dotnet)| 無| |Deployment(註2)| FDD&SCD|FDD| |安裝方式| 有SDK和Runtime模式(類似Java)|只有一種模式| 註1. - CLR 是ASP Dot NET用來管理 .NET 程序,處理資源回收編譯的虛擬機器元件,有點類似Java的JVM - ASP .NET Core 的CLR 稱為CoreCLR,而 .NET Core Cli 會執行CoreCLR 註2. - Framework Dependent Deployment(FDD) 是 .NET部署的一種方式,需要在運行的環境上安裝 .NET Framework runtime 環境 - 指的是部署好的dll或exe,運行上的server也需要安裝對應的 .NET Core 或 .NET Framework - Self-contained Deployment(SCD) 新的部署方式,可以不需要安裝相關的runtime環境就可以針對在不同平台上部署執行 最後補充一張我覺得很直觀的圖 白色範圍的區塊就是 .NET Core cli(donet)幫我們執行的內容 ![](https://i.imgur.com/XEBOg2Y.png) (圖片來源:Alan Tsai 的學習筆記) --- ## .NET Core 的各種專案方式及差異  .NET新增加了幾個不同類型的專案開發方式,可以根據不同的需求,來選擇適合開發的工具,這裡列出官網上的分類逐一說明 - web 開發(本系列重點) - 分成下列四種開發專案的方式 1. Razer page 類似webvForm的code behind. 保留了webForm直覺的開發方式,但不使用Viestate去儲存狀態,適合較小型且功能較單純需求,可以快速的開發功能單純且較實作簡單的專案,對於WebForm開發人員相對MVC上是比較好上手的 2. MVC .NET Core 裡的MVC,和 .NET MVC 差不了太多,但就目前各專案的範本來說,MVC可以整合套用其他的專案範本,也可以整合前端的框架擔任API的角色,彈性比較高 5. Blazor server 屬於MVVM架構,使用component去模組化程式的邏輯,提供了前端及後端的功能的專案範本 7. Blazor client 和Blazor server很類似,只差在是純前端的專案,坦白說Blzaor的寫法覺得很接近Vue的概念,只是差在可以用C#去套用類似Vue的component,而且也提供純前端或前後端的選擇 - web API (本系列重點) - Web API 和 .NET webAPI差不了太多,但底層專案運作的方式也是follow .NET Core的運作原理,這部分在後面會再說明 - SingalR - .NET Core 同時也有支援實作WebSocket的方式,此部分在 .NET 4x時就有提供的即時通訊的實作方式 - gPRC - Remote Procedure Call (RPC) framework. 這部分目前比較沒有涉獵,看起來是不同於HTTP的運作方式,這項技術現行已經存在一段一時間了,但微軟在 .NET Core時代加入此專案範本,並且可跨平台,.NET 4.5以上的版本也可以支援,但只有在 .NET Core 才有專案範本的選項 ## 萬年不敗Hello World(Razor Pages篇) > 一切都從Hello World開始 > 這部分針對Razor page,MVC,Blazor server 和Blazor client 去示範各種專案的Hello World. 在系列文章的最後面也會針對這些部分去示範CRUD 此外,接下來的文章都是使用VS2019 for Mac上操作,發現以前網路上的文章大部分都是VS Code開發,因此好奇試試看VS2019 for Mac的開發體驗,最後關於安裝VS2019 for Mac 的部分就不加已說明 筆者已經先行新增一個DoNETCore30的方案檔 ### Razor Page 開啟VS2019 for Mac(以下簡稱VS2019) 新增專案>選擇web Application>點選下一步 ![](https://i.imgur.com/GNQ6NPQ.png) 在這裡我們先不用使用Authentication,直接下一步 ![](https://i.imgur.com/7y16cLx.png) 取名一個叫做RazorApp的專案,在這裡可以看到下面有可以建議git版本控管的選項,在這裡將此打勾 ![](https://i.imgur.com/97qwwzi.png) 最後可以看到專案的目錄結構大概是這樣 詳細的目錄內容後面會再提到,這裡主要先試著使用預設模板,寫出第一個Hello World ![](https://i.imgur.com/8ZEZ8fE.png) 在這裡可以關注一下Razor Pages的專案,在Pages會有對應的頁面,這一層有點類似webForm的aspx/.cs檔,只是單純將頁面的的部分拆成類似code behind的做法,所以同樣的index.cshtml下也會有一支對應的.cs程式 ![](https://i.imgur.com/oSkuabA.png) ![](https://i.imgur.com/ylodt9z.png) 現在在.cs新增兩個變數NowTime以及Message,並再.cshtml呼叫@Model已綁定的這兩個參數,注意Modle要大寫 ![](https://i.imgur.com/GlnxAzD.png) ![](https://i.imgur.com/XEaJ8IN.png) 最後把專案build起來,就可以看到剛剛輸入的訊息了 其他部分則是VS2019提供的模板,目前這個專案還沒有任何Model的資料 萬事起頭HelloWorld結束 ![](https://i.imgur.com/50jaX0I.png) 補充: 關於VS2019快捷鍵在Mac上的使用方式 在這裡推薦選擇混合(可以同時並存windows上的優點以及Mac上的習慣) 另外建議可以設定一個快捷鍵Clean project 筆者自己在測試時發現,在windows上直接重build專案照理來說就會更新了 但不曉得for Mac的版本,必須要Clean目前的專案在重Build才會更新 索性就直接設定一個快捷鍵給它 快捷鍵設定可以去上設定,這裡將Clean 設定如下 Visual Studio > Preferences > Environment > Key Bindings ![](https://i.imgur.com/YDEVVEQ.png) 另外一點就build,以前在win環境上點Control +F5可以build專案並開啟瀏覽器,關閉瀏覽器就會同時stop run了,根據測試在mac並不會同時,需要在手動Stop,因此也可以記一下快捷鍵比較方便 ![](https://i.imgur.com/65km9oe.png) 這邊就是剛剛說的可以根據自己的習慣選擇不同模式,一開始安裝也會問你要不要設定,如果要調整就是在這裡去做更改 ![](https://i.imgur.com/96Ax9QJ.png) 最後最後 來釐清一個可能有些人會有的問題 > .NET Core == ASP .NET Core ?? > 先來看一張架構圖 ![](https://i.imgur.com/GUClKFd.png) (圖片來源:https://dotnettutorials.net/) .NET Framework和.NET Core是指runtime的環境,底下還有包含一堆微軟提供了一些libraries以及API, 在ASP.NET Core的平台上包含了全部的 .NET Core 1.x & 2.x 和現在最新的3.x ,以及.NET Framework 4.X版,其中只有 .NET Core 的部分是跨平台的,但根據架構圖, 3.x版之後的和前版本是獨立的, 但這整個部分都是指ASP .NET Core這個平台所提供的服務, 在這系列文章提到的 **.NET Core是指** > ASP .NET Core 下 .NET Core 3.1的開發版本 --- 礙於篇幅 今天第一天就先寫到這邊 下一篇會繼續示範其他專案的HellWorld 小弟也是從webForm跳入 .NET Core的蔡逼八 雖然以前有學過 .NET MVC但並沒有像這次當個主題來研究 如果有說明錯誤的還請各位大大指正 --- 參考資料: https://blog.alantsai.net/posts/2017/10/net-framework-see-new-core-04-net-core2-intro https://www.tpisoftware.com/tpu/articleDetails/1438 https://blog.darkthread.net/blog/hello-razor-pages/ https://dotnettutorials.net/lesson/introduction-to-asp-net-core/