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.
Action recommandée
- 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.