"dotnet pack" usa la configuración Release
El comando dotnet pack
, que empaqueta el código en un paquete NuGet, ahora usa la configuración Release
en lugar de la Debug
de forma predeterminada.
Comportamiento anterior
Anteriormente, dotnet pack
usaba la configuración Debug
a menos que la configuración se especificara explícitamente o PackRelease
se estableciera en true
.
La propiedad PackRelease
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_PACK_RELEASE_FOR_SOLUTIONS
para que usará PackRelease
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 pack
usa la configuración Release
de forma predeterminada para todos los proyectos. 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. Además, no podrá depurar una aplicación empaquetada a menos que la configuración Debug
se especifique explícitamente (por ejemplo, mediante dotnet pack --configuration Debug
).
dotnet pack
puede empaquetar para varios moniker de la plataforma de destino (TFM) al mismo tiempo. Si el proyecto tiene como destino varias versiones y tiene valores PackRelease
diferentes para distintos destinos, puede tener un conflicto en el que algunos TFMs empaquetan la configuración Release
y otros la Debug
.
En proyectos en una solución puede ocurrir lo siguiente:
dotnet pack
puede empaquetar todos los proyectos en una solución de Visual Studio si se proporciona un archivo de solución. Para cada proyecto de la solución, el valor dePackRelease
se establece implícitamente entrue
si no está definido. Para quedotnet pack
determine la configuración correcta que se va a usar, todos los proyectos de la solución deben aceptar su valor dePackRelease
.Este cambio puede provocar la regresión del rendimiento de
dotnet pack
, 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_PACK_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 crear un paquete, quiere que el código se optimice y pueda mantener el paquete más pequeño excluyendo la información de depuración.
La variable de entorno DOTNET_CLI_ENABLE_PACK_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 el empaquetado, use la opción-c
o--configuration
condotnet pack
.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 empaquetar una solución y se interrumpe porque uno o varios proyectos establecen explícitamente un valor para
PackRelease
, debe establecer explícitamentePackRelease
enfalse
en cada proyecto:<PropertyGroup> <PackRelease>false</PackRelease> </PropertyGroup>
Si va a empaquetar 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. Si usa esta variable y cualquier proyecto definePackRelease
, todos los proyectos deben definirla, o puede usar un archivo Directory.Build.Props. Esta variable afecta tanto adotnet publish
como adotnet pack
.