Compartilhar via


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

O comando dotnet publish agora usa a configuração Release em vez da configuração Debug por padrão, se o framework de destino for .NET 8 ou uma versão posterior.

Comportamento anterior

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

A propriedade PublishRelease foi adicionada ao .NET 7 visando essa alteração interruptiva. Anteriormente, você poderia definir a DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS variável de ambiente a ser usada PublishRelease 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 publish usará a Release configuração por padrão para projetos que TargetFramework estão definidos como net8.0 ou em uma versão posterior. 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.

Se o projeto for direcionado a várias versões, o novo comportamento só se aplicará se você especificar uma estrutura de destino do .NET 8 ou posterior ao publicar (por exemplo, usando dotnet publish -f net8.0).

Para projetos em uma solução:

  • dotnet publish pode publicar todos os projetos em uma solução do Visual Studio se for dado um arquivo de solução. Para os projetos de solução destinados ao .NET 8 ou posterior, o valor de PublishRelease é implicitamente definido como true se estiver indefinido. No entanto, para dotnet publish determinar a configuração correta a ser usada para a solução, todos os projetos na solução devem concordar com seu valor de PublishRelease. Se um projeto mais antigo na solução tiver PublishRelease definido como false, você deverá definir explicitamente a propriedade para false em novos projetos do .NET 8+ também.

  • Essa alteração pode fazer com que o desempenho de dotnet publish 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_PUBLISH_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 do código-fonte e também é uma alteração comportamental.

Motivo da alteração

Na maioria dos casos, ao publicar, você quer que seu código esteja otimizado e pode manter o aplicativo mais compacto ao excluir as informações de depuração. Os clientes há muito tempo pedem por Release como configuração padrão para publish. Além disso, o Visual Studio tem esse comportamento há muitos anos.

A DOTNET_CLI_ENABLE_PUBLISH_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 publicação, use a opção -c ou --configuration com dotnet publish.

  • 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 publicando uma solução e ela estiver quebrada, você poderá definir PublishRelease para true explicitamente (ou usar false para reverter para o comportamento anterior).

    <PropertyGroup>
      <PublishRelease>true</PublishRelease>
    </PropertyGroup>
    

    Como alternativa, você pode especificar a propriedade em um arquivo Directory.Build.Props . No entanto, se você defini-la como false nesse arquivo, ainda precisará definir explicitamente a propriedade como false nos projetos do .NET 8 ou superiores na solução. Da mesma forma, se alguns projetos definirem explicitamente um valor diferente do valor no arquivo Directory.Build.Props , a publicação falhará.

  • Se você estiver publicando uma solução e o desempenho tiver regredido, você poderá definir a variável de DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS ambiente como true (ou qualquer outro valor) para remover a regressão. No entanto, se você definir essa variável e sua solução contiver um projeto .NET 8+ e um projeto direcionado ao .NET 7 ou anterior, a publicação falhará até que todos os projetos sejam definidos PublishRelease. Essa variável afeta tanto dotnet publish quanto dotnet pack.

Consulte também