作者:.NET 團隊
排版:Alan Wang
今天,我們非常激動地宣布 .NET 9的發布,這是迄今為止最高效、最現代、最安全、最智能、性能最高的 .NET 版本。這是來自世界各地數千名開發人員又一年努力的成果。這個新版本包括數千項性能、安全和功能方面的改進。您會發現在整個 .NET 堆棧(編程語言、開發者工具和工作負載)都有了全面的增強,這使您能夠使用統一平臺進行構建并輕松地將 AI 融入您的應用程序。
您現在可以下載 .NET 9 以及 Visual Studio 2022 和 Visual Studio Code 的 C# Dev Kit 更新。
🔽下載 .NET 9
獲取 Visual Studio 2022 v17.12
.NET 團隊、我們的合作伙伴和 .NET 社區在 .NET Conf 2024 上展示了 .NET 9 中的新功能,并深入介紹了這些功能。視頻可以點播,因此您可以了解包括主題演講在內的所有精彩內容。
https://youtu.be/ikSNL-lxolc?list=PLdo4fOcmZ0oXeSG8BgCVru3zQtw_K4ANY
讓我們來看看 .NET 在開發語言、工作負載和工具方面的亮點。
無與倫比的性能 – 更快的應用程序、更低的內存
.NET 9 是迄今為止性能最高的 .NET 版本,在運行時、工作負載和語言方面進行了 1,000 多項與性能相關的更改,并采用了更高效的算法來生成更好的代碼。Stephen Toub 的對 .NET 9 性能改進的深入研究是必讀之作,讓我們討論一下此版本中的一些亮點。
服務器 GC 已進行重大更改,它將根據應用內存而不是環境(機器/VM/容器)中可用的資源(內存和 CPU)來進行自適應調整。這種方法的改變在高核心數環境中影響深遠,特別是在應用內存較小或隨時間變化較大的情況下。到目前為止,工作站和服務器 GC 實現產生了不同的結果,需要用戶在它們之間做出權衡。對于使用工作站 GC 來控制云應用程序內存使用量的任何人來說,這種變化應該特別有吸引力。內存優勢伴隨著適度的吞吐量成本,但可能并不明顯。服務器 GC 可以配置為使用傳統的實現方式,便于測試。
TechEmpower 基準測試中,.NET 9 表現卓越,吞吐量更高,內存使用大幅降低,這得益于服務器 GC 的改變。
運行時已恢復矢量化并增加了對新芯片的支持,包括 Arm64 SVE、Intel AVX10 和硬件加速運行時。RyuJIT 提高了 Arm64、循環、PGO 和邊界檢查的性能。由于采用了與 Native AOT 相同的異常模型,異常處理速度提高了 50%。
動態配置文件引導優化(PGO)更新后可優化更多代碼模式。JIT 現在可為應用程序中常見和不可見的類型轉換生成快速路徑代碼。例如,(IFoo)myFoo 和 myFoo is IFoo 等轉換在 C# 中非常常見。它還可以針對其觀察到的常見緩沖區長度展開和矢量化緩沖區上的某些操作。此更改可使執行速度提高 70%,但需要禁用 ReadyToRun。
LINQ 針對各種常見情況進行了優化。例如,當底層數組、集合或可枚舉對象為空時,Take 和 DefaultIfEmpty 等方法的返回速度將提高 10 倍。Enumerable.SequenceEqual 已將操作委托給 MemoryExtensions.SequenceEquals,允許將數組作為跨度傳遞以實現高效的迭代和矢量化,并為數組輸入提供特殊處理。此功能現在可用于 List。
System.Text.Json 的底層細節得到了顯著優化,各種操作的性能提升超過50%。JsonProperty.WriteTo 現在可以直接寫入 UTF8 字節,以避免字符串分配。新的 JsonMarshal.GetRawUtf8Value API 返回 UTF8 字節,作為 JsonElement.GetRawText 的替代方案,后者返回字符串并需要編碼和分配。如果可以從給定的枚舉中檢索計數,JsonObject 現在可以正確調整其底層支持存儲的大小,從而避免分配和重新調整大小的成本。
除了 .NET 的這些基礎改進之外,您還會發現所有應用程序類型的性能都有所增強,請繼續閱讀以了解更多信息。
.NET Aspire – 構建更好的應用程序的基礎構建塊
.NET Aspire 是一套功能強大的工具、模板和包,用于無縫開發可觀察的生產就緒型應用程序。自 .NET Aspire 首次發布以來,僅過了六個月,我們已經對堆棧的所有部分進行了改進,從遙測和指標儀表板中的新功能到更簡化的云應用程序部署。很高興看到 .NET Aspire 被各種類型的應用程序采用,并看到社區在其場景中應用集成和工具。此外,我們在 Microsoft 看到了廣泛的應用 - Xbox 和 Copilot 團隊都已將 .NET Aspire 集成到其現有服務中,通過易于訪問的見解和各種兼容的 Azure 集成來加強其內部開發循環。
今天發布的 .NET Aspire 9 帶來了一些您最需要的功能,可以幫助您簡化應用程序開發。現在,您可以從儀表板啟動和停止資源,在調試會話之間保持容器處于活躍狀態,并訪問包括 WaitFor 在內的新 API 以更好地管理資源啟動。我們與社區密切合作,為 OpenAI、Ollama、Milvus 等推出了新的無縫集成。我們簡化了 .NET Aspire 的獲取流程,以便更輕松地將其集成到您的應用程序中,并改進了 Azure 容器應用程序的部署方案,我們很高興宣布 .NET Aspire 預覽版支持 Azure Functions。
.NET Aspire 中還有更多值得探索的內容,從工具到更廣泛的生態系統,例如新的 .NET Aspire 社區工具包。如果您想要開始使用 .NET Aspire,我們的免費 Microsoft Learn 課程和新的 .NET Aspire 認證(https://aka.ms/aspire-credential)是幫助您踏上 .NET Aspire 之旅的絕佳選擇。當然,請讓我們知道您對 .NET Aspire 的看法,無論是在我們的 GitHub、.NET Discord 還是在我們的直播中!
AI——一個不斷發展和繁榮的 AI 生態系統
我們將繼續擴展 .NET 功能,以構建和注入 AI 應用程序。我們提供了新的學習材料和示例、簡化了生態系統集成、并與合作伙伴合作構建了一個充滿活力的 AI 社區,將 AI 解決方案部署到云中比以往任何時候都更加順暢。行業內的眾多公司都采用 .NET 為他們的客戶(包括 H&R Block、Blip 和 KPMG)構建頂級 AI 體驗。.NET 為您最喜歡的編碼助手 GitHub Copilot 提供支持,新的 Microsoft Copilot 體驗是由團隊使用 .NET 重建。
開發人員在構建 AI 服務和應用時,能夠獲得最新的進展至關重要。因此,我們與 Azure、OpenAI、LlamaIndex、Qdrant、Pinecone、Milvus、AutoGen、OllamaSharp、ONNX Runtime 等 AI 生態系統中的許多其他合作伙伴合作,為 .NET 開發人員提供一套功能強大的產品。
我們還通過與社區和我們的控件供應商合作伙伴一起構建智能組件生態系統,使您更輕松地將 AI 注入控件集成到您的 .NET 應用程序中。
.NET 中的 AI 構建塊
一個強大的生態系統意味著開發人員擁有比以往更多的選擇來決定哪種方案最適合他們的場景。我們研究了如何簡化這些集成,并消除生態系統中不斷增長的 API 和功能帶來的入門障礙。因此,我們與 Semantic Kernel 合作,為 .NET 生態系統引入了 Microsoft.Extensions.AI 和 Microsoft.Extensions.VectorData 中的一組抽象,這些抽象提供了統一的 C# 抽象層,用于與 AI 服務(例如小型和大型語言模型 (SLM) 和 LLM、嵌入、向量存儲和中間件)交互。這種新的簡化方法已經從 Pieces 和 OllamaSharp 等早期采用者那里獲得了巨大的成果。
張量和標記器
Microsoft.Extensions.AI 和 VectorData 只是我們在 .NET 9 中提供的構建塊的一個子集,我們還對庫和原始類型進行了重大改進,以改進 AI 開發。Microsoft.ML.Tokenizers 改進了包括 GPT(4、o1 等)、Llama、Phi 和 Bert 等流行模型系列的標記器,還增加了對字節級 BPE、SentencePiece 和 WordPiece 等分詞算法的支持。
隨著語言模型即服務的出現,開發者使用AI的門檻大幅降低。Tensor也通過引入了一種新類型來表示多維數據,簡化了庫和應用操作之間的互操作,從而促進了 AI 開發。
我們迫不及待地想看看您使用這些新的構建塊集成創建的內容。若想快速開始使用它們,請瀏覽我們的 AI 文檔和 .NET 的 AI 示例。
面向 .NET 開發人員的 GitHub Copilot 增強功能
GitHub Copilot 通過改善編輯器體驗并在 .NET 開發人員的常規工作流程中提供 AI 幫助來提高工作效率。隨著 Visual Studio 和 Visual Studio Code 的最新版本以及 GitHub Copilot 的更新,這種體驗會變得更好。現在,您可以使用 Copilot 以及已融入 AI 的 IDE,在整個開發生命周期的各個階段(從編寫代碼到編寫測試,再到調試應用程序)中為您提供幫助。以下是您可以在最新版本中期待的一些功能;
-
AI 智能變量檢查:使用集成 AI 變量檢查優化您的調試工作流程。
-
AI 驅動的 IEnumerable 可視化工具:IEnumerable 可視化工具中 AI 驅動的 LINQ 可編輯表達式。
-
使用 GitHub Copilot 修復代碼:GitHub Copilot 可幫助您解決代碼問題。
-
更好的 C# AI 補全:GitHub Copilot 從相關源文件中引入更多上下文,以改進 C# 的補全。
-
使用 GitHub Copilot 調試測試:使用 GitHub Copilot 調試測試,獲取調試失敗測試的幫助。
copilotvs2022
使用 ASP.NET Core 和 Blazor 進行全棧 Web 開發
ASP.NET Core 是我們針對 .NET 的全棧 Web 框架,提供構建現代 Web 應用程序和可擴展后端服務所需的一切。.NET 具有許多新功能以及顯著的性能、可訪問性和安全性改進。使用 .NET 9 構建的 ASP.NET Core 應用程序默認是安全的,擴展了對提前編譯的支持,改進了監控和跟蹤,并且內置了性能改進,您將看到更高的吞吐量、更快的啟動時間,并且內存使用量更少。
優化了 ASP.NET Core 中靜態文件的處理
靜態 Web 資源(例如 JavaScript 和 CSS 文件)幾乎是每個 Web 應用程序的一部分。.NET 9 中的 ASP.NET Core 現在會在構建和發布期間優化這些文件,以實現高效部署。在構建期間,ASP.NET Core 會識別任何靜態 Web 資源,并通過在文件名中添加基于內容的哈希來生成這些文件的指紋版本。指紋可確保文件名是唯一的,從而避免使用過時的文件版本并允許積極緩存文件。當發布應用程序時,還會使用 Brotli 對文件進行預壓縮,從而大大減少文件下載大小并避免服務器的壓縮負擔過重。文件在運行時使用端點路由進行處理,這意味著您現在可以對靜態文件使用其他端點感知功能,例如按端點授權。
.NET 9 中的 Blazor 改進
.NET 9 中的 Blazor 比以往更好,可讓您構建精美的現代 Web 和混合應用程序。此版本為 Blazor 的各個方面帶來了性能改進、新的 Blazor 混合和 Web 應用程序模板以及供開發人員創造愉悅體驗的新 API。
Blazor 現在可以使用新的 RendererInfo API 在運行時檢測組件渲染模式并相應地調整組件渲染。您可以在預渲染期間禁用或隱藏交互元素,然后在組件交互后啟用它們。
@if (RendererInfo.IsInteractive)
{<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
}
else
{<p>One moment, please</p>
}
使用交互式服務器渲染(Blazor Server)的 Blazor 應用受益于新的重新連接體驗,該體驗具有更友好的 UI、更快地重新連接到服務器,并且在用戶的連接丟失時自動重新加載頁面。
ASP.NET Core 中的 OpenAPI 增強功能
使用 ASP.NET Core 構建的 API 為全球范圍內的服務提供了大規模支持,并且我們在每次發布時都持續改進構建它們的體驗。對于API 開發人員來說,.NET9的一大亮點是使用 Microsoft.AspNetCore.OpenAPI 包對 OpenAPI 文檔生成提供新的內置支持。元數據會自動從您的應用程序代碼、屬性和擴展方法中提取。然后可以使用對操作、架構或整個文檔進行操作的轉換器進一步自定義文檔。在 Minimal API 應用程序中,該功能是原生 AOT 友好的,可讓您能夠優化應用程序以獲得最佳性能。除此之外,OpenAPI 文檔可以在構建時生成,并集成到利用 OpenAPI 工具的本地開發工作流和構建管道中。
提高了 ASP.NET Core 中的安全性
安全性始終是 ASP.NET Core 的核心,您會發現一些改進有助于確保您的應用默認安全。現在可以更輕松地在 Linux 上設置受信任的開發證書以在開發期間啟用 HTTPS。Blazor 現在具有用于將身份驗證狀態傳輸到客戶端的內置 API,并且具有向 OAuth 和 OIDC 授權請求添加其他參數的可擴展性,以及支持推送授權請求 (PAR)。最后,我們強化了 ASP.NET Core 的數據保護支持,并改進了 Kestrel 的連接指標,以便更輕松地檢測連接失敗的原因。
這些只是 .NET 9 的 ASP.NET Core 中的一些改進。有關這些功能及其他功能的更多詳細信息,請參閱 .NET 9 的 ASP.NET Core 中的新增功能。
.NET MAUI – 增強多平臺應用程序開發
.NET MAUI 是使用 .NET 在移動設備和桌面上構建多平臺應用程序的權威方法。除了統一的抽象層以從單個 API 訪問原生功能并從單個代碼庫創建令人驚嘆的跨平臺用戶界面之外,.NET MAUI 還包括為 Android、iOS、macOS 和 Windows 構建的基礎,并提供了訪問 .NET 中的原生 API的途徑。.NET MAUI 進入 .NET 9 的首要目標是提高質量和可靠性,以便您更輕松地將應用部署到生產環境中。在過去的一年里,我們看到在 Google Play 商店中使用 .NET MAUI 構建的應用程序增加了一倍多,開發人員的使用率增長了 30% 以上,達到歷史最高水平,社區參與度和貢獻也令人驚嘆。
我們最近歡迎 .NET 生態系統中領先的組件供應商 Syncfusion 為 .NET MAUI 做出貢獻。自今年 7 月至 9 月 Syncfusion 開始為 .NET MAUI 做出貢獻以來,他們已占到所有社區貢獻的 55% 以上,與前 3 個月相比增長了 557%,這要歸功于一群出色的貢獻者。在 .NET 9 中,我們引入了一個全新的項目模板,將社區放在首位,該模板包含 14 個免費的開源 Syncfusion 控件和來自社區的其他流行庫,這些庫演示了 MVVM、數據庫訪問、導航、視圖刷新和其他常見應用模式的最佳實踐。您可以使用它來快速開始您的應用開發。
我們一直在傾聽開發人員的意見,.NET 9 為桌面和移動應用程序提供了增強的性能、可靠性和更深層次的集成。您會發現 .NET MAUI 的各項性能都有所提升,包括針對 iOS 和 Mac Catalyst 的 CollectionView 和 CarouselView 的新實現、現有控件和應用程序生命周期的更新,以及原生 AOT 和修剪增強功能,使您能夠構建更小、更快的應用程序。除了支持最新的 iOS、macOS 和 Android 操作系統外,我們還在 .NET 9 中添加了幾個原生平臺功能,包括 Android Asset Packs、與原生庫的更好互操作性,以及通過新的 Xcode Sync dotnet 工具簡化 Xcode 和 Visual Studio Code 之間的集成。
.NET 9 中的 .NET MAUI 有很多值得喜愛和探索的地方。請務必仔細閱讀新增功能文檔,并嘗試使用新的項目模板。
使用 .NET 9 進行 Windows 開發
借助 .NET 9,您的 Windows 應用將能夠訪問最新的操作系統功能和能力,同時確保它們比以往任何時候都高效、更易于訪問。無論您是使用 WinUI 3 和 Windows App SDK(https://learn.microsoft.com/windows/apps/windows-app-sdk/) 創建新的現代應用程序,還是對現有的 WPF 和 WinForms 應用程序進行現代化改造,您的 Windows 應用在 .NET 9 上都能獲得最佳運行效果。我們一直與 Windows 開發人員社區密切合作,以提供您一直要求的功能。這包括對更小、性能更高的應用程序的 WinUI 3 的原生 AOT 支持、使用 Fluent UI for WPF 的現代主題增強功能,并且 WinForms 通過獲取新的深色模式、現代圖標 API 和使用 Control.InvokeAsync 時改進的異步 API 訪問等更新得到了增強。
.NET 9 在 Windows 開發方面還有更多內容值得探索,因此請務必閱讀 WinUI 3、WPF 和 WinForms 中的新增功能文檔。
C# 和 F# – 您最喜歡的編程語言變得更加出色
C# 是世界上最受歡迎和最受喜愛的編程語言之一。在 C# 13 中,我們專注于讓您以熟悉和喜愛的風格更輕松、更安全、更快速地編寫代碼的功能。隨著 C# 13 中集合表達式的加入,方法簽名中 params 修飾符的使用得到了增強。這意味著您不再局限于使用帶參數的數組類型,而是可以使用任何受支持的集合類型!
C# 13 通過引入使用 ref struct 值的新方法來解鎖更高性能的代碼,并且使得使用 System.Threading.Lock 處理多線程應用程序變得更加容易:
Lock myLock = new();
void Concat<T>(params List<T> items)
{lock (myLock)Console.WriteLine(string.Join("\e[1mItem: \e[0m", items));
}
F# 繼續為 .NET 開發人員提供最出色的函數式編程。F# 9 提供了各種語言、庫和工具增強功能,旨在讓您的程序更安全、更具彈性、性能更佳。可為null的引用類型為與 C# 庫的交互帶來了類型安全性,優化的整數范圍加快了 for 循環和其他迭代操作的速度,優化的相等性檢查避免了裝箱并提高了許多常見操作的性能。可區分聯合可自動生成 .Is* 屬性,用于快速進行案例測試。標準庫現在包含用于集合的隨機函數,這對于數據科學和游戲開發非常有用。改進的診斷、解析器恢復和各種工具改進提高了開發人員的工作效率。
// FS3261: Nullness warning: The types 'string' and 'string | null' do not have equivalent nullability.
let methodArgument (s: string | null) = File.Create s
let matchNullableString(s: string | null)= match s with // `s` is of type string | null| null -> 0| notNull -> notNull.Length // `notNull` is of type string
我們知道您會喜歡更多的功能,因此請務必瀏覽 C# 13的新增功能文檔和 F# 9的新增功能文檔。如果您即將開始 C# 開發之旅,請務必查看與 freeCodeCamp 合作的 Foundation C# 認證。
全球最佳開發者工具
今天發布的 .NET 9 伴隨著我們開發人員工具的更新,使您的工作效率比以往更加高效。首先,Visual Studio 2022 17.12 的發布帶來了一系列生產力改進,涵蓋了開發人員工作流程的各個方面,包括大幅度的性能改進、增強的調試和診斷體驗、與 .NET Aspire 更緊密的集成、更深的云集成、對 C# 13 的分析器支持、增強的 Git 支持等等!事實上,這個版本的 Visual Studio 2022 具有比以往更多的用戶請求的功能。這個版本適合每個人,我們相信您會喜歡它。
vs20221712
Visual Studio Code 的 C# 開發工具包不斷發展,改進了編輯可靠性、NuGet 包管理、增強了測試適配器和代碼覆蓋率結果、改進了 .NET MAUI 開發支持以及升級的項目啟動/調試配置。請下載最新版本的 Visual Studio 2022 和Visual Studio Code 的 C# 開發工具包,以在今天開始受益并改善您的開發工作流程。
我們知道開發人員喜歡命令行界面(CLI),我們一直致力于提升 .NET CLI 的使用體驗,并幫助將其融入安全的開發流程中。在 .NET 9 中,我們對終端記錄器進行了全面改進,包括可點擊鏈接、持續時間計時器、顏色編碼等。記錄器的輸出更加簡潔,現在您可以在構建結束時找到失敗和警告總數的摘要,使其比以往更加易于使用。
.NET SDK 中還有更多您會喜歡的功能,因此請務必閱讀新增功能文檔。
一個繁榮的創作者和貢獻者社區
我們熱愛出色的 .NET 社區,如果沒有您的支持和貢獻,.NET 9 是不可能實現的。9,000多名社區成員做出了26000多份貢獻!感謝您提出的每一個問題、評論、代碼審查和拉取請求,這些都幫助 .NET 9 成為迄今為止最好的.NET版本。我們也感謝您對 .NET 的熱愛,并在今年的 Stack Overflow 開發者調查中將 .NET 與 ASP.NET Core 和 C# 一起評為最受推崇的框架和編程語言。感謝您幫助建立這個令人驚嘆的全球開發者社區。
感謝所有幫助 .NET 生態系統蓬勃發展的庫創建者,他們讓 NuGet 成為逐年增長最快的軟件包生態系統。現在有超過 42萬個軟件包可供 .NET 開發人員使用,下載量達到驚人的 5700 億次。我們正在大力投資改進 NuGet,以提供開發者喜愛的功能,并努力使其成為全球最安全的軟件包生態系統。
NuGet 為整個生態系統的庫創建者和使用者帶來了重大改進。NuGet.org 有了全新的外觀,現在支持深色模式,與 GitHub 合作為 Dependabot 添加原生 NuGet 支持,對 Open Source Scorecard 和 OpenSSF 固定依賴項的支持,并增強了與 deps.dev 的集成,以便更深入地了解項目中的依賴項。
此版本中的新功能為 .NET 開發人員的軟件包生態系統帶來了增強的安全性。dotnet restore 也已更新,以審核軟件包的頂級和傳遞依賴關系是否存在漏洞。此功能與中央包管理配合使用,可讓您能夠快速將包升級部署到存儲庫中的所有項目。dotnet restore
會在您的終端、Visual Studio 和 CI/CD 管道中向您發出警報,這些警告由 GitHub 咨詢數據庫中的軟件包漏洞驅動。
新的審核行為將產生新的警告,這對于啟用了“將警告視為錯誤”的項目的開發人員來說非常重要。我們鼓勵大家閱讀更新的 NuGet 包審核改進文檔。
從今天開始使用 .NET 9 進行構建
您現在可以下載 .NET 9 以及 Visual Studio 2022 和 Visual Studio Code 的 C# Dev Kit 更新。
🔽下載 .NET 9
獲取 Visual Studio 2022 v17.12
通過 .NET Conf 2024 的點播會議和 .NET 9 每個部分的最新文檔,深入了解此版本中的所有新功能:
-
.NET 9 中的新功能:運行時、庫和 SDK
-
C# 13 中的新功能
-
F# 9 中的新功能
-
ASP.NET Core 中的新功能
-
.NET Aspire 中的新功能
-
.NET MAUI 中的新功能
-
EF Core 中的新功能
-
WPF 中的新功能
-
Windows Forms 中的新功能
此外,我們將在未來幾個月內發布有關 .NET 9 的所有新功能(包括語言、工作負載和工具)的深入博客文章,因此請務必訂閱 .NET 博客,以便在新博客上線時收到通知。
我們迫不及待地想看看您使用 .NET 9 構建的內容。