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
Antes, dotnet pack
usava a configuração Debug
, a menos que a configuração fosse especificada explicitamente ou que PackRelease
fosse definida como true
.
A propriedade PackRelease
foi adicionada ao .NET 7 visando essa alteração interruptiva. Antes, era possível definir a variável de ambiente DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS
para usar 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, o dotnet pack
usará a configuração Release
por padrão em todos os projetos. Se você tiver um script, testes ou um código de CI/CD com Debug
embutido em código em um caminho de saída, essa alteração poderá interromper o 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
poderá 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 dePackRelease
será definido implicitamente comotrue
se for indefinido. Para quedotnet pack
determine a configuração correta a ser usada, todos os projetos na solução precisam concordar com respectivo valor dePackRelease
.Essa alteração pode regredir o desempenho de
dotnet pack
, principalmente em soluções que contêm muitos projetos. Para resolver isso, uma nova variável de ambienteDOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS
foi introduzida.A variável de ambiente
DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS
não é mais reconhecida.
Versão introduzida
.NET 8 versão prévia 1
Tipo de alteração interruptiva
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, o ideal é manter o código otimizado e o pacote menor excluindo as informações de depuração.
A variável de ambiente DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS
foi removida, pois o comportamento habilitado agora é o padrão e o controle granular não é mais necessário.
Ação recomendada
Para desabilitar totalmente o novo comportamento, você pode definir a variável de ambiente
DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
comotrue
(ou qualquer outro valor). Essa variável afetadotnet publish
edotnet pack
.Para especificar explicitamente a configuração
Debug
para empacotamento, use a opção-c
ou--configuration
comdotnet pack
.Se o pipeline de CI/CD estiver interrompido devido a caminhos de saída embutidos em código, atualize os caminhos para
Release
em vez deDebug
, desabilite o novo comportamento usando a variável de ambienteDOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
ou especifique que a configuraçãoDebug
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
, definaPackRelease
explicitamente parafalse
em cada projeto:<PropertyGroup> <PackRelease>false</PackRelease> </PropertyGroup>
Se você estiver empacotando uma solução e o desempenho tiver regredido, defina a variável de ambiente
DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS
comotrue
(ou qualquer outro valor) para remover a regressão. Se você usar essa variável e qualquer projeto definirPackRelease
, todos os projetos deverão defini-la ou você poderá usar um arquivo Directory.Build.Props. Essa variável afetadotnet publish
edotnet pack
.