"dotnet publish" usa la configuración Release

Ahora, el comando dotnet publish usa la configuración Release en lugar de la Debug de forma predeterminada si la plataforma de destino es .NET 8 o una versión posterior.

Comportamiento anterior

Anteriormente, dotnet publish usaba la configuración Debug a menos que la configuración se especificara explícitamente o PublishRelease se estableciera en true.

La propiedad PublishRelease se agregó en .NET 7 como una ruta de acceso hacia este cambio importante. Anteriormente, podía establecer la variable de entorno DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS para que usará PublishRelease en un proyecto que formara parte de una solución de Visual Studio.

Comportamiento nuevo

Si está desarrollando con el SDK de .NET 8 o una versión posterior, dotnet publish usa la configuración Release de forma predeterminada para los proyectos cuya configuración TargetFramework está establecida en net8.0 o una versión posterior. Si tiene un script de CI/CD, pruebas o código donde Debug se ha codificado de forma rígida en una ruta de acceso de salida, este cambio puede interrumpir el flujo de trabajo.

Si el proyecto tiene como destino varias versiones, el nuevo comportamiento solo se aplica si especifica una plataforma de destino de .NET 8 o posterior al publicar (por ejemplo, mediante dotnet publish -f net8.0).

En proyectos en una solución puede ocurrir lo siguiente:

  • dotnet publish puede publicar todos los proyectos en una solución de Visual Studio si se proporciona un archivo de solución. Para los proyectos de solución que tienen como destino .NET 8 o posterior, el valor de PublishRelease se establece en true de forma implícita si no está definido. Pero para que dotnet publish determine la configuración correcta que se va a usar para la solución, todos los proyectos de la solución deben aceptar su valor de PublishRelease. Si un proyecto anterior de la solución tiene PublishRelease establecido en false, debe establecer explícitamente la propiedad en false para los nuevos proyectos de .NET 8+.

  • Este cambio puede provocar la regresión del rendimiento de dotnet publish, especialmente para las soluciones que contienen muchos proyectos. Para solucionarlo, se ha introducido una nueva variable de entorno DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS.

  • La variable de entorno DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS ya no se reconoce.

Versión introducida

.NET 8 Preview 1

Tipo de cambio importante

Este cambio puede afectar a la compatibilidad de origen y también es un cambio de comportamiento.

Motivo del cambio

En la mayoría de los casos al publicar, quiere que el código se optimice y pueda mantener la aplicación más pequeña excluyendo la información de depuración. Los clientes han pedido que Release sea la configuración predeterminada para publish durante mucho tiempo. Además, Visual Studio ha tenido este comportamiento durante muchos años.

La variable de entorno DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS se quitó porque el comportamiento que ha habilitado es ahora el predeterminado y el control granular ya no es necesario.

  • Para deshabilitar completamente el comportamiento nuevo, puede establecer la variable de entorno DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE en true (o en cualquier otro valor). Esta variable afecta tanto a dotnet publish como a dotnet pack.

  • Para especificar explícitamente la configuración Debug para la publicación, use la opción -c o --configuration con dotnet publish.

  • Si la canalización de CI/CD se interrumpe debido a rutas de salida codificadas, actualice las rutas a Release en lugar de Debug, deshabilite el comportamiento nuevo mediante la variable de entorno DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE o especifique que se debe usar la configuración Debug.

  • Si va a publicar una solución y se interrumpe, puede establecer PublishRelease explícitamente en true (o false para revertir al comportamiento anterior).

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

    Como alternativa, puede especificar la propiedad en un archivo Directory.Build.Props. Pero si lo establece en false en este archivo, deberá establecer explícitamente la propiedad false en los proyectos de .NET 8+ de la solución. Del mismo modo, si algunos proyectos establecen explícitamente un valor diferente del valor en el archivo Directory.Build.Props , se producirá un error en la publicación.

  • Si va a publicar una solución y el rendimiento ha realizado una regresión, puede establecer la variable de entorno DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS en true (o en cualquier otro valor) para quitarla. Pero si establece esta variable y la solución contiene un proyecto de .NET 8+ y otro destinado a .NET 7 o versiones anteriores, se producirá un error en la publicación hasta que todos los proyectos definan PublishRelease. Esta variable afecta tanto a dotnet publish como a dotnet pack.

Vea también