使用 --no-restore 发布 ReadyToRun 项目需要更改还原
如果除了 --no-restore
之外还使用 -p:PublishReadyToRun=true
发布项目,则该项目将仅使用在之前的 dotnet restore
操作中恢复的包进行生成。 在 .NET 5 中,此过程有效并生成了一个经过 crossgen 处理的二进制文件。 在 .NET 6 中,这一相同的过程将失败并出现 NETSDK1094 错误。
引入的版本
.NET 6
旧行为
在早期版本中,crossgen 应用程序与运行时一起打包。 因此,无论项目是否已还原,crossgen 进程都可在应用程序上运行。 通常的做法是从将 dotnet restore
与 dotnet 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。