我們很高興宣佈.NET 6 預覽版6問世啦。預覽版6 是我們RC版釋出之前的倒數第二個預覽版。 我們將有兩個RC版。 此版本本身相對較小,而預覽版7會更大。 在那之後,我們將進行質量修復,直到11 月的最終版本。 我們期待一個很棒的新.NET 版本。
您可以下載適用於 Linux、macOS 和Windows 的.NET 6 預覽版 6。
請參閱ASP.NET Core、EF Core和.NET MAUI文章來了解更多關於Web、資料訪問和客戶端方案的新功能。
從.NET 6 預覽版6 開始,我們已經測試並支援Visual Studio 2022 預覽版2。Visual Studio 2022是您可以用來開發.NET 6的開發工具,例如 .NET MAUI 開發、C# 應用程式的熱過載、 用於WebForms 的新Web 實時預覽,以及IDE 體驗中的其他效能改進。.NET 6 也在Visual Studio for Mac 8.9進行了測試。
檢視新的對話帖子,以深入瞭解工程師對最新.NET 功能的討論。
x64 模擬更新
我們已經完成了對macOS 的Apple Silicon 和Windows 的Arm64 的支援。 剩下的就是在macOS Apple Silicon和Windows Arm64上支援x64 模擬。 我們需要做兩件事來實現這一點。
- 並排安裝程式
- 以.NET CLI 為目標的一流架構(主要)支援在各種場景中使用本機架構SDK。
在可以使用並排安裝程式之前(之後在.NET 6 中),您需要安裝所有x64 版本或者所有Arm64 版本。 如果要切換,需要解除安裝/刪除Arm64 機器上的所有.NET 版本。 很抱歉,目前在這個階段只能這樣實現。
工具:.NET SDK 可選工作負載改進
我們新增了三個新的工作負載命令,可實現更好的發現和管理。
- dotnet workload search— 列出可安裝的工作負載。
- dotnet workload uninstall — 如果您不再需要某個工作負載,請刪除指定的工作負載。 也是節省空間的好選擇。
- dotnet workload repair — 重新安裝您之前安裝的所有工作負載。
- 如果您的安裝因網際網路連線斷開而在中間失敗,這將非常有用。
- 可選工作負載由多個工作負載包組成,所以有時候你會發現,其中一些工作負載包安裝成功,而另一些則沒有。
在之前的預覽中,我們新增了以下命令:
- dotnet workload install — 安裝工作負載。
- dotnet workload list — 列出已安裝的工作負載。
- dotnet workload update — 更新已安裝的工作負載。
庫:對System.DirectoryServices.Protocols 的TLS 支援
已為Linux 和macOS 的System.DirectoryServices.Protocols啟用TLS 支援。 之前它已經為Windows 啟用。.NET 使用者現在可以享受與LDAP 伺服器的安全通訊。
歸功於@iinuwa。
工具:Crossgen2 替換 crossgen
Crossgen2已為所有現有的crossgen 場景啟用。 有了這個里程碑,我們還從SDK 中刪除了(舊的)crossgen。 它不再可訪問且無法使用。
Crossgen(1 和2)支援將IL 預編譯為本機程式碼。 預編譯主要有利於改善啟動。Crossgen2 是一個從頭開始的實現,已被證明是程式碼生成創新的卓越平臺。
以下MSBuild 屬性演示瞭如何使用crossgen2 啟用預編譯。
<!-- Enable pre-compiling native code (in ready-to-run format) with crossgen2 -->
<PublishReadyToRun>true</PublishReadyToRun>
<!-- Enable generating a composite R2R image -->
<PublishReadyToRunComposite>true</PublishReadyToRunComposite>
庫:改進了非同步同步效能
非同步同步是一種常見的阻塞工作型別。當它發生線上程池工作執行緒上時,它會導致飢餓。 緩慢的執行緒注入可能會延遲其他已經在佇列的執行緒的執行,並延遲解決飢餓問題的時間。
當是由於非同步同步導致執行緒池工作執行緒上發生阻塞時,此更改預設提高了執行緒注入率。有一些新的 AppContext 配置值可用於配置響應非同步同步的執行緒注入率。
執行時:W^X 記憶體策略
我們正在為W^X 記憶體保護來啟用支援。這是Apple Silicon 機器的一項要求,也是其他作業系統上的一項有用的安全措施。
此功能有一個不太尋常的名字。它應該讀作"write exclusive execute"。這意味著一個記憶體頁可以被標記為讀/寫或讀/執行,但不能包括寫和執行的任何組合。例如,寫入/執行頁面容易被緩衝區溢位攻擊所利用。
此功能需要在整個產品中進行更改,無論在哪裡使用寫入/執行頁面。例如,預覽版6 包含一項更改,要求JIT 與我們採用的 W^X 方案配合。
W^X 是 Apple Silicon 機器上 macOS 的要求,在 .NET 6 的所有其他環境中是可選的,並且可能是 .NET 7 的所有環境中的預設模式。
注意:W^X 實現在 .NET 6 的所有環境中都有一個啟動迴歸,但 Apple Silicon 除外。它將作為 .NET 7 的一部分得到解決。Apple Silicon 實現沒有這種迴歸,是因為作業系統對此方案的支援。
CodeGen 變更日誌
以下程式碼生成更改包含在預覽版6 中。
動態PGO
- 新增選項以隨機選擇受保護的 devirt 類 https://github.com/dotnet/runtime/pull/53399
- pgo/devirt 診斷改進https://github.com/dotnet/runtime/pull/53247
LSRA
- 重構LSRA啟發式選擇 https://github.com/dotnet/runtime/pull/52832
- 現在,除錯模式包含一個COMPlus 變數,LsraOrdering 將讓使用者設定啟發式排序。
- 調整暫存器的啟發式以選擇最佳的暫存器候選溢位。https://github.com/dotnet/runtime/pull/53853
以下改進基於這些更改。
更多改進:
程式碼質量
- 消除多餘的"測試"指令https://github.com/dotnet/runtime/pull/53214
結束語
隨時每一個預覽版的釋出,很快我們將只處理最緊迫的一些的反饋,來為我們最終的版本提供最高的質量保證,如果您尚未嘗試.NET 6,請立即嘗試。 因為這將是你影響釋出的最後機會啦。
感謝所有讓.NET 6 成為更棒的版本做出貢獻的人。
感謝您成為.NET 開發人員。
最後有任何的.NET相關的開發問題,歡迎到Microsoft Q&A論壇提問。