正式釋出 | .NET 7 預覽版 2

微軟技術棧發表於2022-03-25

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

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

預覽版2

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

新正規表示式源生成器帶來了我們編譯引擎的更多效能優勢,而無需額外成本,它還可以提供出色的除錯體驗以及便於修剪。如果您的模式在編譯時是已知的,那麼新的正規表示式源生成器可以很好地幫到您。

您只需要將包含型別轉換為部分型別,並使用 RegexGenerator 屬性宣告一個新的部分方法,該方法將返回優化的 Regex 物件。原始碼生成器將為您填充該方法的實現,並在您更改模式或傳入的其他選項時自動更新。
https://github.com/dotnet/run...

更新前


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

對於 7.0.100-preview 2,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/runtime repo。

該工作現已完成,但我們尚未在 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 內外多個團隊之間的協作。您可以通過閱讀產品路線圖瞭解有關這些領域的更多資訊:

馬上使用

EF7 預覽版 2 也已釋出,可在 NuGet 上使用。您還可以閱讀 ASP.NET Core 預覽版 2 中的新增功能。您可以下載適用於 Windows、macOS 和 Linux 的.NET 7 預覽版 2

安裝程式和二進位制檔案
容器影像
Linux 軟體包
發行說明
已知的問題
GitHub 問題跟蹤器

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

相關文章