官宣 .NET 7 Preview 2

MicrosoftReactor發表於2022-03-20

今天,我們很高興釋出 .NET 7 預覽版 2。.NET 7 的第二個預覽版包括對 RegEx 源生成器的增強、將 NativeAOT 從實驗狀態轉移到執行時的進展,以及對"dotnet new"CLI 的一系列重大改進經驗。這些可供您立即獲取_並_開始嘗試新功能,例如:

  • 在編譯時使用源生成器而不是在執行時使用較慢的方法來構建專門的 RegEx 模式匹配引擎。
  • dotnet new利用 SDK 改進提供全新的簡化選項卡完成體驗來探索模板和引數。
  • 不要削減用你自己的創新解決方案嘗試 NativeAOT。

EF7 預覽版 2 也已釋出,可在NuGet 上使用。您還可以閱讀ASP.NET Core Preview 2 中的新增功能

您可以下載適用於 Windows、macOS 和 Linux 的.NET 7 Preview 2 。

如果您想在 Visual Studio 系列產品中試用 .NET 7,我們建議您使用預覽頻道版本。Visual Studio for Mac 對 .NET 7 預覽版的支援尚不可用,但即將推出。

預覽版 2

Preview 2 版本現在提供以下功能。

引入新的正規表示式源生成器

https://github.com/dotnet/runtime/issues/44676

您是否曾經希望擁有針對您的特定模式優化的專用正規表示式引擎所帶來的所有巨大好處,而無需在執行時構建該引擎的開銷?

我們很高興地宣佈包含在預覽版 1 中的新正規表示式源生成器。它帶來了我們編譯引擎的所有效能優勢,而無需啟動成本,並且它具有其他優勢,例如提供出色的除錯體驗以及修剪-友好的。如果您的模式在編譯時是已知的,那麼新的正規表示式源生成器就是要走的路。

為了開始使用它,您只需要將包含型別轉換為部分型別並使用RegexGenerator屬性宣告一個新的部分方法,該方法將返回優化的Regex物件,就是這樣!原始碼生成器將為您填充該方法的實現,並在您更改模式或傳入的其他選項時自動更新。這是一個示例:

public class Foo
{
  public Regex regex = new Regex(@"abc|def", RegexOptions.IgnoreCase);

  public bool Bar(string input)
  {
    bool isMatch = regex.IsMatch(input);
    // ..
  }
}

public partial class Foo  // <-- Make the class a partial class
{
  [RegexGenerator(@"abc|def", RegexOptions.IgnoreCase)] // <-- Add the RegexGenerator attribute and pass in your pattern and options
  public static partial Regex MyRegex(); //  <-- Declare the partial method, which will be implemented by the source generator

  public bool Bar(string input)
  {
    bool isMatch = MyRegex().IsMatch(input); // <-- Use the generated engine by invoking the partial method.
    // ..
  }
}

就是這樣。請嘗試一下,如果您有任何反饋,請告訴我們。

SDK 改進

[[Epic] 新的 CLI 解析器 + 選項卡完成 #2191](https://github.com/dotnet/tem...)

對於7.0.100-preview2 dotnet new命令為使用者已經使用的許多子命令提供了更加一致和直觀的介面。此外,對模板選項和引數的製表符完成的支援已得到大量更新,現在可以在使用者鍵入時對有效引數和選項提供快速反饋。

以下是新的幫助輸出示例:

❯ dotnet new --help
Description:
  Template Instantiation Commands for .NET CLI.

Usage:
  dotnet new [<template-short-name> [<template-args>...]] [options]
  dotnet new [command] [options]

Arguments:
  <template-short-name>  A short name of the template to create.
  <template-args>        Template specific options to use.

Options:
  -?, -h, --help  Show command line help.

Commands:
  install <package>       Installs a template package.
  uninstall <package>     Uninstalls a template package.
  update                  Checks the currently installed template packages for update, and install the updates.
  search <template-name>  Searches for the templates on NuGet.org.
  list <template-name>    Lists templates containing the specified template name. If no name is specified, lists all templates.

新命令名稱

具體來說,此幫助輸出中的所有_命令_不再像現在那樣具有--字首。這更符合使用者對 CLI 應用程式中子命令的期望。舊版本( --install等)仍可用於防止破壞使用者指令碼,但我們希望將來在這些命令中新增過時警告以鼓勵遷移。

Tab自動補全

dotnet CLI 在 PowerShell、bash、zsh 和 fish 等流行的 shell 上支援 tab 補全已經有一段時間了(有關如何啟用它的說明,請參閱如何為.NET CLI 啟用TAB 補全)。然而,實現有意義的補全取決於單獨的dotnet命令。對於 .NET 7,new命令學習瞭如何提供Tab自動補全

  • 可用的模板名稱(in dotnet new < template-short-name > )
❯ dotnet new angular
angular              grpc            razor            viewstart       worker               -h
blazorserver         mstest              razorclasslib        web                  wpf         /?      
blazorwasm           mvc    razorcomponent       webapi               wpfcustomcontrollib  /h
classlib             nugetconfig         react         webapp           wpflib     install          
console              nunit      reactredux           webconfig      wpfusercontrollib    list
editorconfig         nunit-test           sln       winforms             xunit         search       
gitignore            page         tool-manifest      wnformscontrollib   --help     uninstall       
globaljson           proto        viewimports          winformslib          -?      update             
  • 模板選項(Web模板中的模板選項列表)
❯ dotnet new web --dry-run
--dry-run                  --language                 --output                   -lang
--exclude-launch-settings  --name                     --type                     -n
--force                    --no-https                 -?                         -o
--framework                --no-restore               -f                         /?
--help                     --no-update-check          -h                         /h
  • 這些模板選項的允許值(選擇模板引數上的選擇值)
❯ dotnet new blazorserver --auth Individual
Individual     IndividualB2C  MultiOrg       None           SingleOrg      Windows

當然也有一些已知的差距——例如,-- language不建議安裝語言值。

未來的工作

在未來的預覽版中,我們計劃繼續填補這一過渡留下的空白,並讓自動完成或像使用者可以執行的單個命令一樣簡單。我們希望這將改進整個dotnet CLI 的Tab補全功能,並被社群更廣泛地使用!

下一步是什麼

dotnet new users – 啟用Tab補全並嘗試使用模板!模板作者 – 在您的模板上嘗試Tab補全,並確保您提供您希望您的使用者擁有的體驗。大家 - 提出您在dotnet/templating儲存庫中發現的任何問題,並幫助我們使.NET 7 成為dotnet new的最佳版本!

NativeAOT 更新

我們之前宣佈,我們正在將NativeAOT 專案從實驗狀態轉移到 .NET 7 的主線開發中。在過去的幾個月裡,我們一直在埋頭進行編碼,以將 NativeAOT 從實驗性dotnet/runtimelab repo中移出並進入dotnet/runtimerepo。

該工作現已完成,但我們尚未在 dotnet SDK 中新增支援,來使用 NativeAOT 釋出專案。我們希望儘快完成這項工作,以便您可以在您的應用程式中試用 NativeAOT。同時,請嘗試修剪您的應用並確保沒有修剪警告。修剪是 NativeAOT 的要求。如果您擁有任何庫,請參考準備進行修剪庫的說明

Targeting .NET 7

要targeting .NET 7,您需要在專案檔案中使用 .NET 7 Target Framework Moniker (TFM)。例如:

<TargetFramework> net7.0 </TargetFramework>

全套 .NET 7 TFM,包括特定於作業系統的TFM。

  • net7.0
  • net7.0-android
  • net7.0-ios
  • net7.0-maccatalyst
  • net7.0-macos
  • net7.0-tvos
  • net7.0-windows

我們希望從 .NET 6 升級到 .NET 7 應該很簡單。請報告您在使用 .NET 7 測試現有應用程式的過程中發現的任何重大更改。

支援

.NET 7 是 當前 版本,這意味著它將在釋出之日起 18 個月內獲得免費支援和補丁。請務必注意,所有版本的質量都是相同的。唯一的區別是支援的時間。有關 .NET 支援政策的更多資訊,請參閱.NET 和.NET Core 官方支援政策

重大變化

您可以通過閱讀 .NET 7 中的重大更改文件找到最新的.NET 7 重大更改列表。它按區域和版本列出了重大更改,並附有詳細說明的連結。

要檢視提出了哪些重大更改但仍在稽核中,請關注Proposed .NET Breaking Changes GitHub 問題

路線圖

.NET 版本包括產品、庫、執行時和工具,代表了 Microsoft 內外多個團隊之間的協作。您可以通過閱讀產品路線圖瞭解有關這些領域的更多資訊:

結束

我們感謝您對 .NET 的所有支援和貢獻。請嘗試 .NET 7 Preview 2 並告訴我們您的想法!

相關文章