.NET 7 預覽版 2 正式發(fā)布:RegEx 源生成(chéng)器增強、NativeAOT 更新
3月15号, .NET 7 預覽版 2正式發(fā)布,距預覽版 1 發(fā)布已過(guò)去將(jiāng)近一個月的時(shí)間。.NET 7 的第二個預覽版包括對(duì) RegEx 源生成(chéng)器的增強、將(jiāng) NativeAOT 從實驗狀态轉移到運行時(shí)的進(jìn)展,以及對(duì)“dotnet new”CLI 體驗的一系列重大改進(jìn)。
主要更新内容
引入新的正則表達式源生成(chéng)器
新的正則表達式源生成(chéng)器(Issues 44676)在無需增加啓動成(chéng)本的情況下,爲編譯帶來了許多性能(néng)上的好(hǎo)處,還(hái)提供了良好(hǎo)的調試體驗。
要開(kāi)始使用新的正則表達式源生成(chéng)器,隻需將(jiāng)包含類型轉換爲分部(partial)類型,并使用 RegexGenerator 屬性聲明一個新的分部方法。該方法將(jiāng)返回優化的 Regex 對(duì)象,源生成(chéng)器將(jiāng)自動填充該方法的實現,并在更改模式或傳遞其他選項時(shí)自動更新。例如:
之前:
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 改進(jìn)
新的 CLI 解析器 + 選項卡完成(chéng) #2191
.NET 新命令爲用戶已經(jīng)使用的許多子命令提供了更加一緻和直觀的界面(miàn)。此外,對(duì)模闆選項和參數的 TAB 補全的支持已得到大量更新,在用戶鍵入時(shí)對(duì)有效參數和選項提供快速反饋。以下是新的幫助輸出示例:
❯ 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.
新命令名稱
幫助輸出中的所有命令不再具有 -- 前綴,這(zhè)更符合用戶對(duì) CLI 應用程序中子命令的期望。舊版本(--install 等)仍可用于防止破壞用戶腳本,將(jiāng)來會(huì)在這(zhè)些命令中添加過(guò)時(shí)警告以鼓勵遷移。
Tab 補全
dotnet CLI 在 PowerShell、bash、zsh 和 fish 等流行的 shell 上支持 tab 補全已經(jīng)有一段時(shí)間了。然而,實現有意義的補全取決于單獨的 dotnet 命令。對(duì)于 .NET 7,新命令學(xué)習了如何提供 Tab 補全:
可用的模闆名稱(在 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 winformscontrollib --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 IndividualIndividual IndividualB2C MultiOrg None SingleOrg Windows
NativeAOT 更新
將(jiāng) NativeAOT 從實驗性 dotnet/runtimelab 存儲庫中移出 并進(jìn)入穩定的運行時(shí)庫 dotnet/runtime repo,但尚未在 dotnet SDK 中添加一流的支持,以使用 NativeAOT 發(fā)布項目。