Visual Studio 2022與.NET 6新亮點
作者:許薰尹 精誠資訊/恆逸教育訓練中心資深講師
**本文提及的相關技術同時適用於.NET6與 .NET7版本
.NET 6框架主要的特色包含:
l 支援多種作業系統,包含Windows、Linux、macOS、Android與iOS/tvOS
l Red Hat Enterprise Linux也支援.NET。在RHEL 8及以上版本,.NET 6 將可用於 AMD 和 Intel(x64_64)、ARM (aarch64) 以及 IBM
Z 和 LinuxONE (s390x)架構
l 使用C# 10、F# 6簡化程式碼開發。C# 10提供許多語言增強功能,包含record structs、implicit using;F# 6則包含Task Based async、pipeline debugging等等功能
l 支援OpenTelemetry,它是一組工具程式、API和SDK,讓使用者可以用來收集和輸出測試資料,以便於分析軟體的效能和行為
l 支援HTTP/3
l 支援OpenSSL、ChaCha20Poly1305 encryption scheme與多層防禦 (Defense
in depth)
l 提升程式整體效能,包含FileStream、AOT編譯(ahead-of-time compilation)、Profile-guided optimization (PGO)...等等
l 搭配Visual Studio 2022的多樣新功能,提高生產力,例如熱重載(hot reload)、Git工具...等等
l 統一的開發平台,跨瀏覽器(Browser)、雲端(Cloud)、桌上型應用程式(Desktop)、物聯網(IoT)、行動裝置App,都使用相同的.NET程式庫,更容易分享程式碼,參考下圖:
l .NET Multi-platform App UI(MAUI)
.NET
多平台應用程式 UI(.NET Multi-platform App UI ,MAUI)是一個跨平台、開放源碼的框架,可讓您使用C#程式語言與XAML標記語言來建立跨平台、原生的(Native)行動裝置與桌上型應用程式。
MAUI是從Xamarin.Forms演進過來的,參考下圖來自於微軟官網的文件說明,可知MAUI可以相同的基礎架構程式來建立原生的Android、iOS、macOS與Windows視窗應用程式,只要撰寫一次,就可以到處運行(write-once run-anywhere):
.NET 6提供一系列特定平台專屬的框架來建立應用程式,包含.NET for Android、NET for iOS、.NET for macOS、Windows UI 3 (WinUI 3)程式庫,這些框架底層都使用相同的.NET 6 基礎類別程式庫(.NET 6 Base Class Library ,BCL),這些程式庫將與底層系統溝通的細節隱藏起來,簡化應用程式開發的複雜度。
l 熱重載(Hot reload)
熱重載(Hot reload)功能,可以在應用程式執行的狀態下,修改既有程式碼,不需要中斷或暫停除錯,異動的程式碼會馬上自動編譯並執行,盡可能降低應用程式重新啟動執行的次數,減少等待應用程式建置時間,大大增進程式設計師在應用程式開發上的效率,提高生產力。
Visusl Studio 2022與dotnet watch
CLI工具程式都有支援熱重載(Hot
reload),您可以在多種類型的專案中使用到這個功能,包含ASP.NET
code-behind、ASP.NET Core MVC、ASP.NET
Core Razor Page、ASP.NET Razor (Blazor
Server 和 ASP.NET Core)、WPF、WinForms、Console、.NET
MAUI...等等。
使用方式很簡單,若使用Visual Studio 2022 開發ASP.NET Core Razor Page專案,參考下圖,只要按下 CTRL+F5(限大部分的.NET 6 專案)或F5執行後,再修改程式碼,例如將首頁<h1>標題為「Hello」字串,然後按下「 熱重新載入
(Hot Reload)」按鈕套用程式碼變更,更新的程式碼便馬上執行,瀏覽器中的網頁便馬上顯示出新的標題字串。您也可以勾選「Hot Reload on File Save」項目,後續只要儲存程式碼,便自動編譯、執行。
l .NET全端開發
Blazor是一個新的.NET網站框架(.NET web framework),以WebAssembly標準為基礎,可以取代以往使用JavaScript語言,改用C# / Razor語法與HTML標籤建立執行在瀏覽器上的用戶端應用程式,有了Blazor就可以讓程式設計師專注在一種程式語言,直接使用C# 語言進行全端開發(Full Stack web development)。
微軟從.NET Core 3推出Blazor Server開發架構之後,陸續推出Blazor WebAssembly以及Blazor Hybrid架構。Blazor Server應用程式的特色是在伺服端(Blazor Server)執行,運作方式是將Razor元件(Razor Component)裝載在伺服端上的ASP.NET Core app中執行,瀏覽器中的UI與伺服端將通過SignalR連線進行通訊,瀏覽器中的UI事件觸發時,將通知伺服端做對應處理,再於瀏覽器更新UI。所有的現代化瀏覽器都可支援Blazor Server:
Blazor WebAssembly執行在用戶端瀏覽器之中,使用C# 程式語言撰寫的 *.razor檔案的程式碼,會編譯成組件(Assembly),這些組件與.NET runtime和相依的檔案將會被下載到瀏覽器端來執行。目前大部分的現代化瀏覽器都支援WebAssembly標準,但Microsoft Internet Explorer除外:
ASP.NET Core Blazor Hybrid目前是預覽版,這是一個在 ASP.NET Core 應用程式中使用 .NET 建立互動式用戶端 Web
UI 的一種方式,使用.NET 與Blazor技術來混用桌面和行動原生用戶端框架:
在Blazor Hybrid應用程式中,Razor元件(Razor Component)在裝置上以原生方式執行,可以透過.NET平台存取裝置原生的功能,Razor元件不會在瀏覽器中執行,其渲染的結果將透過Web view控制項呈現。
.NET
多平台應用程式 UI(.NET Multi-platform App UI ,MAUI)內建Blazor
Hybrid應用程式的支援,將.NET
MAUI與Blazor一起使用的好處是能夠跨行動裝置、桌上型應用程式與網站來共用Web UI元件。
在WPF 和
Windows Forms 的應用程式之中也可以使用Blazor Hybrid,可讓您將新的 UI 新增至現有的 Windows 傳統型應用程式之中,以便在 .NET MAUI 或 Web 上跨平台重複使用。
l Visual Studio 2022新範本專案
在Visual Studio 2022版本建立.NET 6專案時可以選擇多種專案範本,相較於之前的版本,新的範本專案會將一些基本程式碼隱藏起來,讓程式碼更為簡潔,不用理會底層運作所需的程式碼,專注在應用程式的邏輯。
例如在Visual Studio 2019版本建立一個主控台應用程式(Console Application)類型的專案,預設專案中會包含一個「Program」類別,預設的程式碼如下,在「Main」方法透過「Console.WriteLine」方法輸出「Hello World!」訊息到主控台:
Visual Studio 2022開發工具建立主控台應用程式(Console
Application)類型的專案,專案建立完成後,只見專案中有一個「Program.cs」檔案,裏頭只有包含一行程式碼。C# 在第九版時新增最上層語句(Top-level Statements)這個功能,讓主控台類型的程式碼可以不必明確地定義一個「Main」方法當程式碼的進入點,這個專案執行後會在主控台輸出「Hello, World!」字串:
l ASP.NET Core MVC網站專案範本
除了主控台類型應用程式的專案和上一個版本不相同之外,ASP.NET Core網站範本也做了一些改良,簡化許多程式碼,例如使用Visual Studio 2022建立一個「ASP.NET Core MVC」範本專案來參考,請參考下圖所示:
專案中有一個「Program.cs」檔案,這個檔案是網站程式的進入點,檔案中包含以下程式碼,比前版Visual Studio 2019建立的專案少了許多基礎程式碼:
當您執行這個專案,將啟動瀏覽器,執行結果參考下圖所示:
l .NET升級之路
如果有跨平台需求,或是想設計微服務、將應用程式部署到Linux Docker 容器、需要高效能且可擴充的系統,那麼就要考慮一下從.NET Framework平台升級到.NET 6,在.NET Framework平台上的程式設計人員根據使用的技術與架構,建議升級學習路徑如下:
l 使用Windows Forms、WPF開發桌上型應用程式,可直接升級到.NET 6的Windows Forms、WPF。
l 使用ASP.NET MVC 5 開發網站程式,可以升級至ASP.NET Core MVC。
l 使用ASP.NET Web Forms 開發網站程式,可以升級至ASP.NET Core Razor Page或Blazor Server。
l ASP.NET
MVC 5 Web API服務,可以升級至ASP.NET
Core Web API 或Minimal API(基本 Api)。
l
使用WCF服務,可以升級至gRPC來設計遠端程序呼叫應用程式(Remote Procedure Call app)。
0 意見:
張貼留言