"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 dePublishRelease
se establece entrue
de forma implícita si no está definido. Pero para quedotnet 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 dePublishRelease
. Si un proyecto anterior de la solución tienePublishRelease
establecido enfalse
, debe establecer explícitamente la propiedad enfalse
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 entornoDOTNET_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.
Acción recomendada
Para deshabilitar completamente el comportamiento nuevo, puede establecer la variable de entorno
DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
entrue
(o en cualquier otro valor). Esta variable afecta tanto adotnet publish
como adotnet pack
.Para especificar explícitamente la configuración
Debug
para la publicación, use la opción-c
o--configuration
condotnet publish
.Si la canalización de CI/CD se interrumpe debido a rutas de salida codificadas, actualice las rutas a
Release
en lugar deDebug
, deshabilite el comportamiento nuevo mediante la variable de entornoDOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
o especifique que se debe usar la configuraciónDebug
.Si va a publicar una solución y se interrumpe, puede establecer
PublishRelease
explícitamente entrue
(ofalse
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 propiedadfalse
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
entrue
(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 definanPublishRelease
. Esta variable afecta tanto adotnet publish
como adotnet pack
.