La publicación de un proyecto ReadyToRun con --no-restore requiere cambios en la restauración

Si publica un proyecto con -p:PublishReadyToRun=true además de --no-restore, el proyecto solo se compilará con paquetes que se restauraron en una operación anterior dotnet restore. En .NET 5, este proceso funcionó y dio lugar a un binario de crossgen'd. En .NET 6, este mismo proceso dará el error NETSDK1094.

Versión introducida

.NET 6

Comportamiento anterior

En versiones anteriores, la aplicación crossgen se empaquetaba con el runtime. Como resultado, el proceso crossgen se pudo ejecutar en la aplicación independientemente de si el proyecto se había restaurado o no. Era una práctica común separar dotnet restore de dotnet publish, agregar --no-restore al comando de publicación para asegurarse de que no se ha producido ningún acceso de red adicional.

Comportamiento nuevo

En .NET 6, dotnet restore seguido de dotnet publish -p:PublishReadyToRun=true --no-restore producirá el error NETSDK1094. Esto se debe a que el binario crossgen ahora se incluye como un paquete NuGet independiente, por lo que debe formar parte de la operación de restauración para que la publicación se realice correctamente.

Motivo del cambio

El binario crossgen no es necesario para muchas cargas de trabajo, por lo que fue separado del SDK principal. Normalmente se adquiere bajo demanda y los destinos de MSBuild de publicación ahora controlan esta adquisición agregando el paquete a la lista de paquetes que se van a restaurar.

  • Si desea mantener una experiencia de publicación aislada, indique al paso de restauración que va a publicar ReadyToRun. Agregue -p:PublishReadyToRun=true también a la línea de comandos de restauración.
  • O bien quite --no-restore de la línea de comandos de publicación para permitir que el comando de publicación restaure también el crossgen.