.NET 10 亮點巡禮
| | | 0 | |
今年 1111 .NET Conf 2025 大會的最大焦點莫過於 .NET 10 正式發布,作為 LTS 版本(2028/11/10 EOS),使用 .NET 8/9 的企業或組織可以開始評估及準備升級。
(註:.NET 5 開始 .NET 每年會固定推出新版,其中雙數版號為 Long Term Support,提供三年技術支援 延伸閱讀)

作為重度 .NET 使用者,準時上車是一定要的,篇將用我的視角簡單整理 .NET 10 亮點:(參考:Announcing .NET 10)
效能提升
自從 .NET 改為年年推新版,來到第 10 版,能改的明顯效能問題差不多都被改完了,想再加速變得愈來愈困難。所以 .NET 10 的效能提升不是來自某個關鍵環節被突破,而是累積了數百項微小改良優化,在 JIT、GC、Span、LINQ 等核心功能都進行了改善,提升整體的執行效能和資源使用效率。而身為開發者,倒也不用深入了解其中細節,升級 .NET 10 後不需調程式即可享受更快、更省記憶體的執行效能。對細節有興趣的同學可參考這篇:Performance Improvements in .NET 10
C# 14 / F# 10
C# 14 也隨著 .NET 10 一併推出,前兩個月我才從 C# 8 一路盤點到 C# 13,對於 C# 14,未來也會另外寫一篇。
至於 F# 10,上個月有簡單了解一下 Functional Programming,知道 F# 的定位與重要性,不過短期內它跟我不會有交集,跳過。
支援後量子密碼學 PQC
快速發展中的量子電腦即將摧毀當代資訊安線,所有資訊系統應提早做好準備。(想了解更多可參考我的 PQC 系列文章,未來幾年內資訊相關人員都必須認識這個議題)
.NET 10 開始支援 ML-KEM、ML-DSA、SLH-DSA 等 PQC 金鑰交換及數位簽章標準,但部分 API 仍在實驗階段(標註為 [Experimental]),大家先心理有數,過幾年應該就會被逼著升級 RSA/ECDSA 等傳統密碼學演算法。
網路功能與其他程式庫強化
.NET 10 推出能簡化 WebSocket 程式寫法的 WebSocketStream 類別、在 macOS 支援 TLS 1.3、Windows 程序群組化管理、HTTP/Sockets/WebSockets 資源耗用及效能改善、JSON 反序列化安全強化與效能提升、支援 AES-KWP 演算法... 延伸閱讀
Aspire 13
Aspire 是 .NET 官方推出的分散式應用程式開發與部署框架,目的在簡化前端、API、容器、資料庫等多元組件協作,讓開發者能更快、更安全地建構可觀測、可部署的雲端應用。這部分我暫時用不到,也先跳過。
Microsoft Agent Framework
Agent Framework 繼承了微軟先前的兩大 AI 專案 Semantic Kernel 和 AutoGen,目的在提供建構、託管與監控 AI Agent 和多代理系統的框架。先前開發者被迫在高穩定性可觀測的 Semantic Kernel 與能簡潔實現多代理協同作業的 AutoGen 者二選一,現在瀨尿牛丸來了。Agent Framework 主打簡潔,強調只需少量程式碼即可建構 AI 代理,大幅減少了樣板程式碼(Boilerplate Code)。
在框架中可使用 LLM (如 Azure OpenAI、OpenAI)處理輸入、呼叫工具(Tools)產生回應,實作 AI Agent,並提供以圖形為基礎的工作流程設計,能明確編排、協調多個 AI Agent 與工具,執行複雜多步驟任務。程式架構遵循 .NET 慣用風格,像是 IHostApplicationLifetime、IConfiguration、IServiceCollection (DI)、Middleware... 等,.NET 開發者應能輕鬆上手(以下是一個建立 Writer、Editor AI Agent,並建立工作流程串接起來的簡單範例)。另外,框架內建豐富的遙測(Telemetry)功能,可監控代理的行為、效能指標、Token 使用量和錯誤追蹤,為實際應用在生產環境已做好準備。延伸閱讀: Introducing Microsoft Agent Framework (Preview): Making AI Agents Simple for Every Developer
// Create agents with minimal code
AIAgent writer = new ChatClientAgent(
chatClient,
new ChatClientAgentOptions
{
Name = "Writer",
Instructions = "Write engaging, creative stories."
});
// Orchestrate in workflows
AIAgent editor = new ChatClientAgent(chatClient, /* ... */);
Workflow workflow = AgentWorkflowBuilder.BuildSequential(writer, editor);
AIAgent workflowAgent = await workflow.AsAgentAsync();
AI Agent Web API template (aiagent-webapi) 能快速將 AI Agent 轉成 HTTP 服務,還包含 Microsoft Agent Framework Dev UI,提供 Agent 及工作流程的視覺化操作介面,很酷:

此外,Agent Framework 支援 AG-UI 協定,方便用 AI Agent 快速打造可用系統,AG-UI Interactive Dojo 有線上範例可體驗與參考程式範例:

Microsoft.Extensions.AI
Microsoft.Extensions.AI 是 AI 服務的抽象層,為 OpenAI, Azure OpenAI, GitHub Models, Ollama 訂定統一的 API 介面,如此不修改程式就能抽換 AI 底層服務提供者。延伸閱讀
using OpenAI;
using Microsoft.Extensions.AI;
// OpenAI
IChatClient client =
new OpenAIClient(Environment.GetEnvironmentVariable("OPENAI_API_KEY"))
.AsChatClient(modelId: "gpt-4o-mini");
// Azure OpenAI Api
IChatClient client =
new AzureOpenAIClient(
new Uri(Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")),
new DefaultAzureCredential())
.AsChatClient(modelId: "gpt-4o-mini");
// Llama
IChatClient client =
new OllamaChatClient(new Uri("http://localhost:11434/"), "llama3.1");
// 呼叫端一律使用 IChatClient,不管 LLM 提供者
var response = await client.CompleteAsync("What is AI?");
Console.WriteLine(response.Message);
Model Context Protocol (MCP)
.NET 10 支援專案模版可快速將 AI Agent 包成 MCP 伺服器,在 LLM 應用中提供客製化資料庫存取、組織內部 API 呼叫、執行指令與工作流程、檔案讀寫、第三方系統整合... 等自訂服務,有興趣的話,MS Learn 有個製作亂數生成器 MCP Server 的教學範例。
ASP.NET Core
.NET 10 的 ASP.NET Core 新增了 Memory Pool 自動驅逐功能(Automatic Memory Pool Eviction),當網站應用程式閑置一段時間,可自動將集區配置記憶體釋放回系統。
ASP.NET Core Identity 現在支援 WebAuthn 及 IFIDO2 標準,方便 Passkey 免密碼登入。(延伸閱讀:不使用 ASP.NET Core Identity,ASP.NET Core 整合 WebAuthn/Passkey 無密碼登入之精簡範例)
此外,原本 ASP.NET Core Web API 發佈為 Native AOT 時無法提供 OpenAPI 文件,缺口已由社群開發者補上。
.NET 10 也為 OpenAPI 及 Minimal API 加入新功能:
- OpenAPI 強化:支援 OpneAPI 3.1 文件規格、可使用 XML 註解指定 OpenAPI 文件描述及說明文字、支援 YAML 格式,回應結果現在可加註 Description 說明資訊。
- Minimal API 新增
builder.Services.AddValidation();可自動依據 DataAnnotations Attribute 驗證屬性值是否有效,無效時拋回 HTTP 400。參考 - 新增
TypedResults.ServerSentEvents()方便 Minimal API 回傳 Server-Sent Events (SSE)。(延伸閱讀:Server-Sent Events 即時廣播範例) - 加入
IProblemDetailsService
Blazor 改良
Blazor 讓你用純 C# 寫網頁,概念類似古早時代的 WebForm,例如以下範例,可以用 C# 寫 HTML <button> 的 onclick 事件讓 <p> 的計數數字加一:
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" onclick="@IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
Blazor 背後巧妙使用 WebAssembly 實現魔法,一樣用 C# 寫前端事件,效能比古代 PostBack + ViewState 好很多。Blazor 還在起步加速發展階段,.NET 10 在 Blazor 方面一舉進行多頂強化改良。不過,我有前端基礎,能自在用 JavaScript/Vue.js 寫網頁,「用 C# 寫前端,不必學 JavaScript」這點對我吸引力不大,故我對 Blazor 暫不會深入,.NET 10 對 Blazor 的加強部分也都先跳過。延伸閱讀:好奇 Blazor 原理?看這篇 - Blazor 預覽筆記
監測與偵錯功能增強
ASP.NET Core 核心內建了多項計量指標,例如:HTTP 請求處理時間、並行請求數、路由比對嘗試次數、例外狀況攔截次數... 等等,有利進行線上系統狀態監控。在 Blazor 方面也加入伺服器追蹤及 WebAssembly CPU 效能監測、記憶體傾印功能,方便偵錯。
.NET MAUI
MAUI 是 .NET 的 iOS/Android/macOS/Windows 跨平台 App 開發解決方案,.NET 10 在元件及 XAML 上做了強化,這塊我目前沒接觸到,未來若有機會再深入。
EF.Core
EF.Core 10 加入不少新功能:詳情
- 支援 Azure SQL 及 SQL Server 2025 的 VECTOR_DISTANCE() 函式,可查詢向量相似度,跟上 LLM 時代。
- 提升 SQL 2025 的原生 json 型別處理效率,LINQ 查詢子句可使用 JSON_VALUE()、RETURNING。
- Azure SQL/SQL 支援預設限制條件命名。
- Azure Cosmos DB 全文檢索支援 FullTextContains, FullTextContainsAll, FullTextContainsAny, FullTextScor 函數,可整合 RRF (Reciprocal Rank Fusion) 函式增進 AI 搜尋效率,向量相似度查詢已 GA 可用於生產環境。
float[] myVector = /* generate vector data from text, image, etc. */ var hybrid = await context.Blogs.OrderBy(x => EF.Functions.Rrf( EF.Functions.FullTextScore(x.Contents, "database"), EF.Functions.VectorDistance(x.Vector, myVector))) .Take(10) .ToListAsync(); - 可批次操作 JSON 型別資料,例如:
await context.Blogs.ExecuteUpdateAsync(s => s.SetProperty(b => b.Details.Views, b => b.Details.Views + 1)); - 改良 LINQ 查詢時參數傳遞方式,提升查詢計劃快取效率。
- 支援 LetJoin/RightJoin
- FromSqlRaw 在偵測到 SQL 指令拼裝會發出警告,有助於防止 SQL Injection。例如:

Windows Desktop App
WinUI 3、WPF,甚至 Windows Form 也有些小改善:
- Windows From 從 .NET Framework 移植 UITypeEditor,改善了剪貼簿處理。
- WPF 效能改進、Fluent UI 風格修正、品質提升。
- WinUI 3 加入最新版 Windows App SDK 特色與改善。
.NET 10 SDK
.NET 10 SDK 加入了不少新功能,包含:
- 整合 xUnit、NUnit、MSTest 測試框架提供統一測試操作體驗的 Microsoft.Testing.Platform
- 透過
dotnet completions script pwsh | Out-String | Invoke-Expression為 dotnet CLI 加入自動完成 (註:官方文件錯寫成 dotnet completions generate,已有人提 Issue)

- dotnet publish 新增 /t:PublishContainer 參數取代 csproj
<EnableSdkContainerSupport>屬性指定建立容器 Image,並增加<ContainerImageFormat>屬性可指定 Docker 或 OCI dotnet tool exec --source ./artifacts/package/ dotnetsay "Hello, World!"允許開發者不在全域或本地安裝工具的情況下直接執行 .NET 工具,方便 CI/CD。dnx dotnetsay "Hello, World!"可直接執行工具dotnet <cmd> --cli-schema產生該命令的規格描述(JSON 格式)- SLNX 格式:傳統 .sln 是微軟獨創格式,現在可用
dotnet sln migrate升級成如下 XML 形式,更結構式易讀,方便於 git diff 比對:<Solution> <Configurations> <Platform Name="Any CPU" /> <Platform Name="x64" /> <Platform Name="x86" /> </Configurations> <Project Path="my-app/my-app.csproj" /> </Solution> - dotnet 指令支援名詞優先寫法,例如:
dotnet add package ...可寫成dotnet package add ...,符合通用 CLI 慣例。 - File-based C#,不用建立 .csproj 專案檔,寫一個 .cs 檔案就能執行跟發布成可執行檔。這是我最愛的 .NET 10 新功能,未來再專門寫一篇。
註:Visual Studio、VSCode 這次也有許多更新,這篇聚焦 .NET 10 本身,略過。
Highlights new features in .NET 10: performance, PQC, Agent Framework, Extensions.AI, MCP, enhanced ASP.NET Core, Blazor, EF Core, SDK, and tooling improvements.
Comments
Be the first to post a comment