Compartilhar via


Publicar um projeto ReadyToRun com --no-restore requer alterações na restauração

Se você publicar um projeto com -p:PublishReadyToRun=true além de --no-restore, o projeto só será construído com pacotes que foram restaurados em uma operação anterior dotnet restore. No .NET 5, esse processo funcionava e resultava em um binário crossgen'd. No .NET 6, esse mesmo processo falhará com o erro NETSDK1094.

Versão introduzida

.NET 6

Comportamento anterior

Nas versões anteriores, o aplicativo crossgen foi empacotado com o runtime. Como resultado, o processo de crossgen foi capaz de ser executado em seu aplicativo, independentemente de o projeto ter sido restaurado ou não. Era uma prática comum separar dotnet restore de dotnet publish e adicionar --no-restore ao comando de publicação para garantir que não ocorressem acessos adicionais à rede.

Novo comportamento

No .NET 6, dotnet restore seguido por dotnet publish -p:PublishReadyToRun=true --no-restore falhará com o erro NETSDK1094. Isso ocorre porque o binário crossgen agora é distribuído como um pacote NuGet separado e, portanto, precisa ser parte da operação de restauração para que a publicação seja bem-sucedida.

Motivo da alteração

O binário crossgen não é necessário para muitas cargas de trabalho, portanto, ele foi separado do SDK principal. Normalmente, ele é adquirido sob demanda, e as metas de publicação do MSBuild agora lidam com essa aquisição adicionando o pacote à lista de pacotes a serem restaurados.

  • Se você quiser manter uma experiência de publicação isolada, informe à etapa de restauração que publicará ReadyToRun. Adicione -p:PublishReadyToRun=true à linha de comando de restauração também.
  • Ou remova --no-restore da linha de comando de publicação para que o comando de publicação também restaure o crossgen.