找回密码
 立即注册
首页 业界区 业界 .NET 10 中的新增功能系列文章4——.NET SDK中的新增功 ...

.NET 10 中的新增功能系列文章4——.NET SDK中的新增功能

聱嘹 2025-8-5 07:58:53
引言

随着 .NET 10 的发布,.NET SDK 迎来了一系列令人振奋的新功能和增强特性。这些改进不仅提升了开发者的工作效率,还优化了应用程序的性能和部署体验。本文将详细介绍 .NET 10 SDK 中的新增功能,包括工具改进、基于文件的应用增强、包引用修剪等,帮助开发者充分利用这些新特性来构建更高效的应用程序。
正文

.NET 工具改进

特定于平台的 .NET 工具

.NET 10 引入了对多平台 .NET 工具的增强支持,开发者现在可以在单个包中发布支持多个 RuntimeIdentifier (RID) 的工具。这意味着工具作者可以捆绑所有受支持平台的二进制文件,而 .NET CLI 会在安装或运行时自动选择正确的二进制文件。这一改进显著简化了跨平台工具的创作和分发流程。
这些改进的工具支持多种包装变体:

  • 依赖于框架,平台无关(经典模式,任何安装了 .NET 10 的地方都可以运行)
  • 框架依赖,平台特定(更小,针对每个平台进行优化)
  • 自包含,平台特定(包含运行时,无需安装 .NET)
  • 裁剪版,平台特定(更小,裁剪未使用的代码)
  • 平台特定的 AOT 编译(最大性能和最小部署)
这些新工具的工作方式与常规的已发布应用程序非常相似,因此任何可用于应用程序的发布选项(如自包含、剪裁或 AOT 编译)也同样适用于这些工具。
单次工具执行

.NET 10 引入了 dotnet tool exec 命令,允许开发者执行 .NET 工具而无需全局或本地安装该工具。这对于 CI/CD 或临时使用场景尤其有用。
  1. dotnet tool exec --source ./artifacts/package/ toolsay "Hello, World!"
复制代码
执行此命令会下载并运行指定的工具包。如果工具本地不存在,系统会提示用户确认下载。除非指定显式版本(如 toolsay@0.1.0),否则将使用工具包的最新版本。
新的 dnx 工具执行脚本

dnx 脚本提供了一种简化的方式来执行工具,它将所有参数转发到 dotnet CLI 进行处理:
  1. dnx toolsay "Hello, World!"
复制代码
dnx 命令的实际实现是在 CLI 本身的 dotnet 中,这允许其行为随时间推移而演变。
通过 --cli-schema 实现的 CLI 自省

所有 CLI 命令上都新增了 --cli-schema 选项。使用时,它会输出调用的命令或子命令的 CLI 命令树的 JSON 表示形式,这对于工具作者、shell 集成和高级脚本非常有用。
  1. dotnet clean --cli-schema
复制代码
输出示例:
  1. {
  2.   "name": "clean",
  3.   "version": "10.0.100-dev",
  4.   "description": ".NET Clean Command",
  5.   "arguments": {
  6.     "PROJECT | SOLUTION": {
  7.       "description": "The project or solution file to operate on...",
  8.       "arity": { "minimum": 0, "maximum": null }
  9.     }
  10.   },
  11.   "options": {
  12.     "--artifacts-path": {
  13.       "description": "The artifacts path...",
  14.       "helpName": "ARTIFACTS_DIR"
  15.     }
  16.   },
  17.   "subcommands": {}
  18. }
复制代码
基于文件的应用程序功能增强

具备发布支持和本地 AOT 的增强

基于文件的应用现在支持通过 dotnet publish app.cs 命令发布到本机可执行文件,默认情况下,所有基于文件的应用都以本机 AOT 为目标。如果需要使用与本机 AOT 不兼容的包或功能,可以使用 #:property PublishAot=false 指令禁用此功能。
基于文件的应用还包括以下增强功能:

  • 项目引用:支持通过 #:project 指令引用项目
  • 运行时路径访问:应用程序文件和目录的路径可在运行时通过 System.AppContext.GetData 访问
  • 增强了 shebang 支持:通过改进的 shebang 处理(包括支持无扩展名文件),直接执行 shell 脚本
项目引用示例:
  1. #:project ../ClassLib/ClassLib.csproj
  2. var greeter = new ClassLib.Greeter();
  3. var greeting = greeter.Greet(args.Length > 0 ? args[0] : "World");
  4. Console.WriteLine(greeting);
复制代码
增强的 shebang 支持示例:
  1. #!/usr/bin/env dotnet
  2. Console.WriteLine("Hello shebang!");
复制代码
修剪由框架提供的包引用

从 .NET 10 开始,NuGet 审核功能现在可以修剪项目不使用的框架提供的包引用。默认情况下,所有 net 目标框架(如 net8.0 和 net10.0)以及 .NET Standard 2.0 及更高版本的目标框架都启用此功能。
此更改有助于:

  • 减少生成过程中还原和分析的包数量
  • 缩短生成时间
  • 减少磁盘空间使用量
  • 减少来自 NuGet 审计以及其他依赖项扫描机制的误报情况
虽然此功能默认为列出的 TPM 启用,但可以通过在项目文件中将 RestoreEnablePackagePruning 属性设置为 false 来禁用此功能。
更一致的命令顺序

.NET 10 引入了常见命令的新别名,使它们更易于记住和键入:
新名词优先形式别名dotnet package adddotnet add packagedotnet package listdotnet list packagedotnet package removedotnet remove packagedotnet reference adddotnet add referencedotnet reference listdotnet list referencedotnet reference removedotnet remove reference新的名词优先表单符合一般 CLI 标准,使 dotnet CLI 与其他工具更加一致。虽然动词优先表单继续工作,但建议使用名词优先表单以提高脚本和文档中的可读性和一致性。
CLI 命令默认为交互式终端中的交互模式

在交互式终端中,现在默认启用 --interactive 标志用于 CLI 命令。此更改允许命令动态检索凭据或执行其他交互行为,而无需显式设置标志。对于非交互方案,可以通过指定 --interactive false 来禁用交互性。
原生 shell Tab 补全脚本

dotnet CLI 现在支持使用 dotnet completions generate [SHELL] 命令为常用 shell 生成原生 Tab 补全脚本。支持的 shell 包括:

  • bash
  • fish
  • nushell
  • powershell
  • zsh
例如,在 PowerShell 中,可以通过将以下内容添加到 $PROFILE 中来启用补全功能:
控制台应用可以原生创建容器映像

控制台应用现在可以通过 dotnet publish /tublishContainer 创建容器映像,而无需在项目文件中包含  属性。这使控制台应用与 ASP.NET Core 和 Worker SDK 应用的行为保持一致。
使用新的  属性可以显式地将容器映像的格式设置为 Docker 或 OCI。此属性替代默认行为,具体取决于基本映像格式以及容器是否为多体系结构。
支持 dotnet test 中的 Microsoft 测试平台

从 .NET 10 开始,dotnet test 原生支持 Microsoft.Testing.Platform。要启用此功能,可以将以下配置添加到 dotnet.config 文件:
  1. [dotnet.test.runner]
  2. name = "Microsoft.Testing.Platform"
复制代码
系列文章

.NET 10 中的新增功能系列文章1——运行时中的新增功能
.NET 10 中的新增功能系列文章2——ASP.NET Core 中的新增功能
.NET 10 中的新增功能系列文章3——.NET MAUI 中的新增功能

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册