.NET 11 Preview 5 帶來了多方面的更新,涵蓋了 runtime、SDK、C# 語言以及多個核心框架。對於開發者而言,這次更新最值得關注的在於降低開發門檻的 File-based apps、更強大的型別安全機制,以及 Blazor 在使用者體驗上的顯著提升。
簡化開發流程的 File-based apps 與 SDK 更新
以往在 .NET 開發中,我們必須先建立一個專案檔(如 .csproj)才能開始撰寫程式碼。而 File-based apps(文件導向應用程式)旨在讓開發者能像撰寫簡單的腳本一樣,直接在單一或少數幾個檔案中開發,無需預先配置複雜的專案結構。
在 Preview 5 中,微軟引入了 #:ref 指令,允許開發者在文件導向的應用程式中直接引用另一個文件導向應用程式作為函式庫,而不需要將其轉換為正式專案。此外,NuGet 與 package 等命令列工具現在也能直接識別這類文件路徑,大大降低了原型開發的摩擦力。
此外,SDK 現在內建了 Model Context Protocol (MCP) 伺服器範本,開發者可以使用 dotnet new mcpserver 直接建立伺服器,無需額外安裝套件。為了提升安全性,SDK 也新增了檢查機制,能主動警告目前安裝的 SDK 是否存在已知漏洞或已達到生命週期終點(End of Life)。
C# 語言的新特性:追求更嚴謹的型別安全
C# 這次引入了三個重要的預覽特性,核心目標是讓編譯器能協助開發者減少執行時期的錯誤。
首先是 Closed Class(封閉類別)。這是一種限制繼承的機制,規定該類別只能在同一個 Assembly(組件,即編譯出的 DLL 檔案)內部被繼承。這對開發者最大的好處在於,當我們使用 switch 表達式處理這類類別時,編譯器可以確定所有可能的子類別都已被涵蓋,從而確保邏輯的完整性,避免遺漏某些情況。
其次是 Union Declaration(聯合宣告)。這是一種值型別,允許一個變數在定義的一組固定類型中擇一持有。結合模式比對(Pattern Matching),開發者可以更優雅且安全地處理多種可能的狀態,而不需要依賴複雜的類別繼承體系。
最後是 Unsafe Evolution(不安全代碼演進)。在 C# 中,操作記憶體指標必須在 unsafe 區塊內。新提案允許指標型別出現在 unsafe 區塊之外,但僅將實際讀取非託管記憶體(Unmanaged Memory)的危險操作限制在 unsafe 區塊中,讓代碼結構更清晰,同時維持安全邊界。
Blazor 與 ASP.NET Core 的效能與體驗優化
Blazor 的更新集中在表單驗證與渲染效能。以往伺服器端渲染(SSR)的表單在驗證時往往需要與伺服器來回通訊(Round-trip),導致使用者感受到延遲。現在,SSR 表單支援即時的客戶端驗證,能立即給予使用者反饋。
同時,Blazor 現在支援非同步驗證規則,例如在驗證時直接查詢資料庫以確認帳號是否重複。此外,驗證訊息與屬性名稱現在支援在地化(Localization),能根據使用者語言顯示對應內容。對於資料呈現,QuickGrid 的排序與分頁功能現在也能在靜態渲染頁面上運作。
針對 Blazor WebAssembly 獨立應用程式,微軟推出了名為 Gateway 的新開發伺服器,內建了 SPA fallback routing(單頁應用程式回退路由),解決了在開發環境中重新整理頁面時常遇到的 404 路由問題。
框架層級的其它重要更新
在 .NET MAUI 方面,這次更新主要在於穩定性提升,修復了 CollectionView 與 Shell 等核心控制項的大量問題。此外,Windows Map 控制項現在正式由 Azure Maps 提供底層支援,並將 Android 最低支援版本提升至 API 24。
Entity Framework Core (EF Core) 則將 SQL Server 2022 作為預設相容版本,並針對文件導向應用程式優化了 dotnet ef 工具。值得注意的是,新引入的 EF1004 分析器警告能幫工程師揪出那些雖然寫了 async 但實際上卻會同步執行的查詢,避免造成執行緒阻塞(Thread Blocking)。
來源:infoq.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。