使用 --no-restore 发布 ReadyToRun 项目需要更改还原

如果除了 --no-restore 之外还使用 -p:PublishReadyToRun=true 发布项目,则该项目将仅使用在之前的 dotnet restore 操作中恢复的包进行生成。 在 .NET 5 中,此过程有效并生成了一个经过 crossgen 处理的二进制文件。 在 .NET 6 中,这一相同的过程将失败并出现 NETSDK1094 错误。

引入的版本

.NET 6

旧行为

在早期版本中,crossgen 应用程序与运行时一起打包。 因此,无论项目是否已还原,crossgen 进程都可在应用程序上运行。 通常的做法是从将 dotnet restoredotnet publish 分开,将 --no-restore 添加到 publish 命令以确保不会发生额外的网络访问。

新行为

在 .NET 6 中,dotnet restore 后跟 dotnet publish -p:PublishReadyToRun=true --no-restore 将失败并出现 NETSDK1094 错误。 这是因为 crossgen 二进制文件现在作为单独的 NuGet 包提供,因此需要作为还原操作一部分才能成功发布。

更改原因

许多工作负载不需要 crossgen 二进制文件,因此它从主 SDK 中拆分出来。 通常按需获取它,发布 MSBuild 目标现在通过将包添加到要还原的包列表中来处理此获取。

  • 如果要维护独立的发布体验,请告知还原步骤你要发布 ReadyToRun。 同时将 -p:PublishReadyToRun=true 添加到 restore 命令行。
  • 或者,从 publish 命令行中删除 --no-restore,允许 publish 命令也恢复 crossgen。