Roll-forward do tempo de execução de implantação independente

As implantações de aplicativos autônomos do .NET Core incluem as bibliotecas do .NET Core e o tempo de execução do .NET Core. A partir do SDK do .NET Core 2.1 (versão 2.1.300), uma implantação de aplicativo independente publica o tempo de execução de patch mais alto em sua máquina. Por padrão, para uma implantação independente, dotnet publish seleciona a versão mais recente instalada como parte do SDK na máquina de publicação. Isso permite que seu aplicativo implantado seja executado com correções de segurança (e outras correções) disponíveis durante publisho . O aplicativo deve ser republicado para obter um novo patch. Aplicativos autônomos são criados especificando -r <RID> no dotnet publish comando ou especificando o identificador de tempo de execução (RID) no arquivo de projeto (csproj / vbproj) ou na linha de comando.

Visão geral do roll forward da versão do patch

restorepublish e build são dotnet comandos que podem ser executados separadamente. A escolha de tempo de execução é parte da restore operação, não publish ou build. Se você ligar publishpara , a versão mais recente do patch será escolhida. Se você ligar publish com o --no-restore argumento, talvez não obtenha a versão de patch desejada porque uma anterior restore pode não ter sido executada com a nova política de publicação de aplicativo independente. Nesse caso, um erro de compilação é gerado com texto semelhante ao seguinte:

"O projeto foi restaurado usando Microsoft.NETCore.App versão 2.0.0, mas com as configurações atuais, a versão 2.0.6 seria usada em vez disso. Para resolver esse problema, certifique-se de que as mesmas configurações são usadas para restauração e para operações subsequentes, como compilar ou publicar. Normalmente, esse problema pode ocorrer se a propriedade RuntimeIdentifier for definida durante a compilação ou publicação, mas não durante a restauração."

Nota

restore e build pode ser executado implicitamente como parte de outro comando, como publish. Quando executados implicitamente como parte de outro comando, eles recebem contexto adicional para que os artefatos certos sejam produzidos. Quando você publish com um tempo de execução (por exemplo, dotnet publish -r linux-x64), o implícito restore restaura pacotes para o tempo de execução do linux-x64. Se você chamar restore explicitamente, ele não restaurará pacotes de tempo de execução por padrão, porque não tem esse contexto.

Como evitar a restauração durante a publicação

A execução restore como parte da operação pode ser indesejável para o publish seu cenário. Para evitar restore durante publish a criação de aplicativos autônomos, faça o seguinte:

  • Defina a RuntimeIdentifiers propriedade como uma lista separada por ponto-e-vírgula de todos os RIDs a serem publicados.
  • Defina a propriedade TargetLatestRuntimePatch como true.

Argumento sem restauração com opções de publicação dotnet

Se você deseja criar aplicativos autônomos e aplicativos dependentes de estrutura com o mesmo arquivo de projeto e deseja usar o --no-restore argumento com dotnet publish, escolha uma das seguintes opções:

  1. Prefira o comportamento dependente da estrutura. Se o aplicativo for dependente da estrutura, esse é o comportamento padrão. Se o aplicativo for autônomo e puder usar um tempo de execução local 2.1.0 sem patch, defina o TargetLatestRuntimePatch como false no arquivo de projeto.

  2. Prefira o comportamento independente. Se o aplicativo for independente, esse é o comportamento padrão. Se o aplicativo depender da estrutura e exigir o patch mais recente instalado, defina TargetLatestRuntimePatch como true no arquivo de projeto.

  3. Assuma o controle explícito da versão da estrutura de tempo de execução definindo RuntimeFrameworkVersion para a versão de patch específica no arquivo de projeto.