微軟近期發佈了 .NET 11 的第一個發行候選版本(Release Candidate 1,簡稱 RC1)。這次更新不僅是版本號的跳轉,最關鍵的變動在於 RC1 隨附了 Go-Live 支援授權。在軟體開發週期中,RC 版本通常用於最終測試,但此次提供的授權允許開發團隊直接將 .NET 11 應用於生產環境(Production),這意味著企業在正式版發佈前,即可在實際運行環境中部署基於此版本的應用程式。目前的開發環境支援包括最新的 Visual Studio 2026 Insiders 版本,以及搭配 C# Dev Kit 的 Visual Studio Code。
語言層級的演進與穩定化
隨著 .NET 11 RC1 的推出,C# 15 正式成為目標框架為 .NET 11 專案的預設語言版本。C# 15 將先前在預覽版中引入的多項特性正式穩定化。其中最受關注的是 Union Types(聯合類型),這是一種允許變數持有多種特定類型之一的型別系統,能有效簡化複雜的狀態管理,且現在不再需要開啟預覽設定即可使用。此外,該版本還引入了 Collection Expression Arguments(集合表達式參數)、Non-virtual Static Interface Members(非虛擬靜態介面成員)以及 Closed Class Hierarchies(封閉類別階層)。封閉類別階層允許開發者限制類別的繼承範圍,增加程式碼的安全性與可預測性,部分開發者甚至因此選擇放棄長期支援(LTS)版本而升級至 .NET 11。
而在 F# 11 方面,預設版本的更新重點在於效能與相容性。最顯著的改進是字串插值(String Interpolation)的編譯方式,從原本依賴反射(Reflection)的 printf 引擎改為編譯成 String.Concat。這項變動至關重要,因為它讓 F# 能夠更好地支援 Trimming(修剪,指移除未使用的程式碼以縮小體積)以及 Native AOT(原生提前編譯,將程式碼直接編譯為機器碼而非中間語言),從而大幅提升執行效率並降低記憶體佔用。此外,F# 11 還穩定化了 Record Spreads 與直接委派建構,並為 Record 與 Union 提供了無需反射的 ToString 輸出。
SDK 與跨平台開發工具的強化
在 SDK 方面,dotnet test 工具得到了顯著擴展,現在可以直接執行針對 Android、iOS、macOS 以及 Mac Catalyst 的測試專案,並為這些平台提供了對應的專案範本。為了提升測試管理效率,新版本增加了執行層級的選項,例如可設定超時時間、在達到特定失敗次數後停止運行,並允許每個測試應用程式擁有獨立的結果目錄。
針對容器化部署,.NET 11 RC1 最佳化了發佈流程。當設定 SOURCE_DATE_EPOCH 環境變數時,容器發佈可以產生一致的映像檔摘要(Image Digest),這對於確保建置的可重複性(Reproducibility)非常重要。同時,若目標倉庫中已存在相同的映像檔清單(Image Manifest),系統將跳過上傳步驟,加速 CI/CD 流程。
框架功能更新與實務限制
ASP.NET Core 在此版本中完成了 SignalR 身分驗證刷新 API 的開發,支援伺服器端、.NET 客戶端以及 TypeScript 客戶端。對於 Blazor Server 而言,電路(Circuits)現在可以在不重新連線的情況下更新身分識別。在 OpenAPI 文件方面,系統現在能將過時的操作、類型與屬性正確標記為 Deprecated(棄用),提升了 API 文件的維護品質。
而在 .NET MAUI 方面,除了將 dotnet test 擴展至行動端與桌面端外,還增加了 TabbedPage 徽章、主題化啟動畫面,並優化了 Android 的建構流程,使其編譯速度更快且產出體積更小。
儘管更新內容豐富,但社群反饋也指出了一些限制。部分開發者發現 Union Types 在使用 System.Text.Json 進行序列化時存在問題,因為輸出的 JSON 缺乏類型鑑別器(Type Discriminator),導致無法在反序列化時正確還原回原始類型。此外,Device Bound Session Credentials(裝置綁定會話憑據)目前仍處於實驗階段,將在整個 .NET 11 週期中保持預覽狀態。
總體而言,.NET 11 RC1 展現了微軟在提升開發語言表達力與原生執行效能上的方向,尤其是對 Native AOT 的持續優化與對生產環境部署的提前開放,為追求高效能與快速迭代的開發團隊提供了更多選擇。
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。