Compartilhar via


O 'dotnet pack' usa a configuração Release

O comando dotnet pack, que empacota o código em um pacote NuGet, agora usa a configuração Release em vez da configuração Debug por padrão.

Comportamento anterior

Anteriormente, dotnet pack usava a Debug configuração, a menos que a configuração fosse especificada explicitamente ou PackRelease estivesse definida como true.

A propriedade PackRelease foi adicionada ao .NET 7 visando essa alteração interruptiva. Anteriormente, você poderia definir a DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS variável de ambiente a ser usada PackRelease em um projeto que fazia parte de uma solução do Visual Studio.

Novo comportamento

Se você estiver desenvolvendo com o SDK do .NET 8 ou uma versão posterior, dotnet pack usará a Release configuração por padrão para todos os projetos. Se você tiver um script de CI/CD, testes ou código em que você tenha codificado Debug em um caminho de saída, essa alteração poderá interromper seu fluxo de trabalho. Além disso, você não poderá depurar um aplicativo empacotado, a menos que a configuração Debug seja especificada explicitamente (por exemplo, usando dotnet pack --configuration Debug.

dotnet pack pode empacotar para vários TFM (Monikers da Estrutura de Destino) ao mesmo tempo. Se o projeto for direcionado a várias versões e houver valores de PackRelease diferentes para destinos diferentes, poderá haver um conflito em que alguns TFMs empacotam a configuração Release e outros empacotam a configuração Debug.

Para projetos em uma solução:

  • dotnet pack pode empacotar todos os projetos em uma solução do Visual Studio se receber um arquivo de solução. Para cada projeto na solução, o valor de PackRelease é implicitamente definido como true caso esteja indefinido. Para que dotnet pack determine a configuração correta a ser usada, todos os projetos na solução devem concordar em seu valor de PackRelease.

  • Essa alteração pode fazer com que o desempenho de dotnet pack regredir, especialmente para soluções que contêm muitos projetos. Para resolver isso, uma nova variável DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS de ambiente foi introduzida.

  • A DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS variável de ambiente não é mais reconhecida.

Versão introduzida

.NET 8 versão prévia 1

Tipo de mudança disruptiva

Essa alteração pode afetar a compatibilidade de origem e também é uma alteração comportamental.

Motivo da alteração

Na maioria dos casos, ao criar um pacote, você deseja que seu código seja otimizado e possa manter o pacote menor excluindo as informações de depuração.

A DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS variável de ambiente foi removida, pois o comportamento habilitado agora é o comportamento padrão e o controle granular não é mais necessário.

  • Para desabilitar totalmente o novo comportamento, você pode definir a variável de DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE ambiente como true (ou qualquer outro valor). Essa variável afeta tanto dotnet publish quanto dotnet pack.

  • Para especificar explicitamente a Debug configuração para empacotamento, use a opção -c ou --configuration com dotnet pack.

  • Se o pipeline de CI/CD estiver quebrado devido a caminhos de saída codificados, atualize os caminhos para Release em vez de Debug, desabilite o novo comportamento usando a variável de ambiente DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE ou especifique que a configuração Debug deve ser usada.

  • Se você estiver empacotando uma solução e ela estiver interrompida porque um ou mais projetos definem explicitamente um valor para PackRelease, defina PackRelease explicitamente para false em cada projeto:

    <PropertyGroup>
      <PackRelease>false</PackRelease>
    </PropertyGroup>
    
  • Se você estiver empacotando uma solução e o desempenho tiver retrocedido, poderá definir a variável de ambiente DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS para true (ou qualquer outro valor) para remover a regressão. Se você usar essa variável e qualquer projeto definir PackRelease, todos os projetos deverão defini-la ou você poderá usar um arquivo Directory.Build.Props. Essa variável afeta tanto dotnet publish quanto dotnet pack.

Consulte também