La pubblicazione di un progetto ReadyToRun con --no-restore richiede modifiche al ripristino
Se si pubblica un progetto con -p:PublishReadyToRun=true
oltre a --no-restore
, il progetto verrà compilato solo con i pacchetti ripristinati in un'operazione dotnet restore
precedente. In .NET 5 questo processo ha funzionato e ha generato un file binario incrociato. In .NET 6 lo stesso processo avrà esito negativo restituendo l'errore NETSDK1094.
Versione introdotta
.NET 6
Comportamento precedente
Nelle versioni precedenti, l'applicazione crossgen è stata inserita in un pacchetto con il runtime. Di conseguenza, il processo crossgen è stato in grado di essere eseguito nell'applicazione indipendentemente dal fatto che il progetto venisse ripristinato o meno. Era pratica comune separare dotnet restore
da dotnet publish
, aggiungendo --no-restore
al comando di pubblicazione per far sì che non si verificassero accessi di rete aggiuntivi.
Nuovo comportamento
In .NET 6, dotnet restore
seguito da dotnet publish -p:PublishReadyToRun=true --no-restore
avrà esito negativo restituendo l'errore NETSDK1094. Ciò è dovuto al fatto che il file binario crossgen viene ora fornito come pacchetto NuGet separato e quindi deve far parte dell'operazione di ripristino perché la pubblicazione abbia esito positivo.
Motivo della modifica
Il file binario crossgen non è necessario per molti carichi di lavoro, quindi è stato suddiviso dall'SDK principale. Viene in genere acquisito su richiesta e le destinazioni MSBuild di pubblicazione gestiscono ora tale acquisizione aggiungendo il pacchetto all'elenco di pacchetti da ripristinare.
Azione consigliata
- Se si vuole mantenere un'esperienza di pubblicazione isolata, indicare al passaggio di ripristino che si effettuerà la pubblicazione ReadyToRun. Aggiungere
-p:PublishReadyToRun=true
anche alla riga di comando di ripristino. - In alternativa, rimuovere
--no-restore
dalla riga di comando di pubblicazione per consentire al comando pubblica di ripristinare anche crossgen.