La publication d’un projet ReadyToRun avec --no-restore nécessite de changer la restauration

Si vous publiez un projet avec -p:PublishReadyToRun=true en plus de --no-restore, le projet est généré seulement avec des packages qui ont été restaurés dans une opération dotnet restore précédente. Dans .NET 5, ce processus fonctionnait et aboutissait à un binaire cross-gen. Dans .NET 6, ce même processus échoue avec l’erreur NETSDK1094.

Version introduite

.NET 6

Comportement précédent

Dans les versions précédentes, l’application cross-gen était packagée avec le runtime. Par conséquent, le processus cross-gen pouvait s’exécuter sur votre application, que le projet ait été restauré ou non. Il était courant de séparer dotnet restore de dotnet publish, en ajoutant --no-restore à la commande publish pour qu’il n’y ait aucun accès réseau supplémentaire.

Nouveau comportement

Dans .NET 6, dotnet restore suivi de dotnet publish -p:PublishReadyToRun=true --no-restore échoue avec l’erreur NETSDK1094. C’est parce que le fichier binaire cross-gen est désormais fourni dans un package NuGet distinct et doit donc faire partie de l’opération de restauration pour que la publication réussisse.

Raison du changement

Le binaire cross-gen n’étant pas nécessaire pour de nombreuses charges de travail, il a été séparé du SDK principal. Il est généralement acquis à la demande, et les cibles MSBuild de publication gèrent désormais cette acquisition en ajoutant le package à la liste des packages à restaurer.

  • Si vous voulez maintenir une expérience de publication isolée, indiquez à l’étape de restauration que vous publiez ReadyToRun. Ajoutez -p:PublishReadyToRun=true également à votre ligne de commande de restauration.
  • Vous pouvez également supprimer --no-restore de votre ligne de commande de publication pour permettre à la commande publish de restaurer également le binaire cross-gen.