近日,.NET 7 预览版 2 已正式公布,距预览版 1 公布已过来将近一个月的工夫。.NET 7 的第二个预览版包含对 RegEx 源生成器的加强、将 NativeAOT 从试验状态转移到运行时的停顿,以及对“dotnet new”CLI 体验的一系列重大改良。
次要更新内容
引入新的正则表达式源生成器
新的正则表达式源生成器(Issues 44676)在无需减少启动老本的状况下,为编译带来了许多性能上的益处,还提供了良好的调试体验。
要开始应用新的正则表达式源生成器,只需将蕴含类型转换为分部(partial)类型,并应用 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 改良
新的 CLI 解析器 + 选项卡实现 #2191
.NET 新命令为用户曾经应用的许多子命令提供了更加统一和直观的界面。此外,对模板选项和参数的 TAB 补全的反对已失去大量更新,在用户键入时对无效参数和选项提供疾速反馈。以下是新的帮忙输入示例:
❯ 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 补全曾经有一段时间了。然而,实现有意义的补全取决于独自的 dotnet 命令。对于 .NET 7,新命令学习了如何提供 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 更新
将 NativeAOT 从实验性 dotnet/runtimelab 存储库中移出 并进入稳固的运行时库 dotnet/runtime repo,但尚未在 dotnet SDK 中增加一流的反对,以应用 NativeAOT 公布我的项目。