2023年4月26日 星期三

掌握.NET 7,打造跨平台應用

作者:羅慧真  精誠資訊/恆逸教育訓練中心資深講師


2023年 Microsoft .NET 更新到第七版了。

迅速轉動的資訊界,每一年更新幾個版本已經是常態,業界也早已經習慣如此的變動,並且採取的策略便是,若非必要就以不變應萬變,明日地球依舊會轉動。

按此策略前進,那麼數算起來,您的技術已經有多久沒有更新了呢? 那天與一位朋友聊天,談話過程中朋友表示,怎麼C#已經變成這樣了? .NET本來就可以跨平台啊,為什麼.NET 7還在講跨平台? .NET 7、.NET Core、.NET Framework 不都是.NET嗎,差別在哪裡啊?那個什麼雲飄往哪裡去,與我有關嗎?




版本的演進

.NET Framework最後一個版本是4.8,它是以Windows作業系統為主的軟體框架,而.NET Core的版本是從3.x開始算起是2014年發佈的,是Microsoft重新以符合跨多種作業系統WindowsLinuxmaxOS撰寫的開放源軟體開發框架。起初的命名是.NET Core 3.x,下一版索性將Core字眼拿掉,並為了避免與.NET Framework 4.x版搞混,所以直接跳了一個版本為.NET 5.0;並且Microsoft制定了每個版本的發佈週期以及支援的策略,支援的策略基本上分為兩種:

l   STS標準期限支援(Standard Term Support),為期18個月。

l   LTS長期支援(Long Term Support),為期36個月。


從此圖看來,奇數版本是標準期限支援,偶數版本是長期支援。

(參考圖: https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core)



.NET 7最大特色就是 (根據官網描述)

著重於整合、現代化、簡單且快速


.NET 7C#F#以及.NET MAUIBlazorASP.NET CoreWeb APIWPFWinForms … 等應用程式帶來更高性能及新功能。整體運算符合現代化的雲端原生模型的定義,透過容器的微服務架構開發具有快速移植、提高效率、降低維護成本及業界最強的隔離能力的雲端架構。


.NET MAUI擴大.NET跨平台的版圖

話說回來,.NET Core已經達到真正跨到不同的作業系統(WindowsLinuxmaxOS),到了.NET 6之後,MicrosoftXamarin Forms整合進.NET,並為其命名為.NET MAUI而這帶來了擴大.NET跨平台的版圖,開發人員只需要寫一次程式,經過編譯便可生成執行於AndroidiOSmacOSWindows等平台上的應用程式(也就是實踐了跨電腦與行動裝置的應用程式)


.NET 6為了實現這樣的願景提供了一系列的平台架構,如下圖(圖源自於微軟官方網站https://learn.microsoft.com/zh-tw/dotnet/maui/what-is-maui)


包含適用於AndroidiOSMac.NET (.NET for Android.NET for iOS.NET for Mac),還有WinUI 3程式庫。它們一致存取.NET 6 BCL (基本類別庫) ,而BCL提供抽象化程序會在.NET執行階段對應到合適的執行環境,以AndroidiOSmacOS來說,它們的執行環境是使用Mono Runtime,而Windows作業系統則是.NET Core CLR

這一大跨越,對於開發團隊而言是一大福音,因為它大大減少了應用程式開發的成本和複雜度。


前端網頁開發使用Blazor + C#

現今流行的前端網頁開發、SPA(Single Page Application)等技術,市場流行的架構包含AngularReactVUE …等,這些架構都是以JavaScript語言為基礎的實作;而您若是早已熟悉C#語言及.NET架構的生態系統,又有發展前端網頁應用程式的需求,那麼何需再重新學習另一種語言生態(JavaScript語言為基礎的網頁架構AngularReactVUE…),熟悉C#的您,Blazor ASP.NET Core就是您最佳的選擇。

Blazor是在.NET Core 3.x加入.NET家族的,到如今.NET 7.0已經是一個相當成熟的產品,事實上「Blazor」是Microsoft自創的新字,由此兩字組合而成:

Browser + Razor = Blazor


Blazor WebAssembly是運行在用戶端的瀏覽器上,再次強調您的App是使用C# 並使用.NET基礎程式庫,也就是您所熟悉的環境下開發前端應用程式。隨著.NET版本(7)的推進,Blazor也可執行在傳統應用程式WPFWinForm,甚至是.NET MAUI


支援gRPC

gRPC是由Google發起的遠端程序呼叫(Remote procedure call)的開放源系統,是基於HTTP/2傳輸協定,且使用Protocol Buffers做為介面描述語言(Protobuf格式:輕量級的二進位序列化格式,比XMLJSON更為精簡有效率)。可以用於認證、雙向串流、串流控制、適用於跨平台、語言相容的微服務架構。




現在可以透過Visual Studio 2022使用ASP.NET Core gRPC服務建構gRPC服務端



使用任何類型的專案(WPFWinForm.NET MAUI …)建構用戶端應用程式,並在專案中加入NuGET套件:Grpc.Net.ClientGoogle.ProtobufGrpc.Tools,便可使用gRPC雙向傳輸的功能。




舊版升級

對於傳統應用程式WPF WinFormMicrosoft同等的重視這些舊有的技術,.NET 7提供了平順的升級工具,也就是說,您可以將在.NET Framework時代所寫的程式升級到跨平台的.NET

這是原本使用.NET Framework 4.7.2所建立的WPF專案。



經過終端機指令:

upgrade-assistant upgrade [專案名稱]

專案便完成升級的程序。



對於以上內容有興趣的,您可參考恆逸教育訓練中心以下課程:

l   【UAC498】從設計到實作ASP.NET Core Blazor網站開發

在過去設計網站應用程式,至少要學兩種程式語言,前端瀏覽器使用JavaScript,再挑選個後端伺服端技術,例如ASP.NET CorePHP。現在.NET的框架中新增ASP.NET Core Blazor,可以讓您取代JavaScript,從前端寫到後端都使用相同的C#程式語言來撰寫程式碼。Blazor開發架構分為兩種:Blazor WebAssemblyBlazor Server。本課程將專注在Blazor Server框架,以建立互動式網站應用程式。

l    UN291.NETDocker Container微服務實務應用

使用容器的微服務架構是一個快速移植、提高效率、降低維護成本及業界最強的隔離能力的雲端架構。本課程將利用Visual Studio開發工具,並使用.NET Core技術建立現代化、以雲端為基礎的RESTful網站應用程式;並利用Docker Container開發,方便後續部署至Kubernetes(K8s)微服務架構的網站應用程式。

l   【UN398】.NET MAUI跨界先鋒從桌面到移動的全平台開發旅程

有想過撰寫一次代碼,即可遊走四大平台(AndroidiOSmacOSWindows)?

.NET MAUI實現了這樣的願景,它的前身是由Xamarin.Forms演進而來。使用C# XAML撰寫一次代碼即可建構可執行於AndroidiOSmacOSWindows上的App

本課程將使用C#XAMLVisual Studio 2022開發.NET MAUI桌上與行動裝置的應用程式,您將學會如何使用XAML定義UI畫面,了解多種版面配置及使用者經驗,應用資源與樣式達到UI一致性及共享的特質,以及資料存取、WEB API的連結,具備硬體裝置的存取能力,最後知道如何將完成的App部署及預備。

l   【UN492】.NET精粹的極致技術解密之旅

您將透過這個課程了解.NET 7(.NET Core).NET Framework的差別,以及.NET 7如何真正實踐跨平台架構,您也將透過這個課程了解C#1011 的重大更新,以及如何將傳統的WPF Windows Form專案升級到.NET 7 。此外,您將學到Entity Framework 7的相關知識,還有透過.NETAPI做檔案管理與資料串流的處理,同時您將學到效能的增進上使用非同步程式設計的相關技術,包括Taskasync/await、平行處理和PLINQ。另外,您將學會如何使用JSON序列化和WebAPIgRPC及微服務進行遠端存取。最後,本課程還將介紹背景工作服務與歷程紀錄(警告訊息、錯誤訊息的Log)以及應用程式的組態、部署與發佈,以幫助您掌握完整的應用程式開發流程。透過這些課程內容,您將能夠建立跨平台的應用程式,並學習使用各種相關的技術和工具,讓您能夠在開發應用程式的過程中更加得心應手。





l    UN291.NETDocker Container微服務實務應用





0 意見:

張貼留言