"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 Releasey 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 de PackRelease se establece implícitamente en true si no está definido. Para que dotnet pack determine la configuración correcta que se va a usar, todos los proyectos de la solución deben aceptar su valor de PackRelease.

  • 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 entorno DOTNET_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.

  • 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 el empaquetado, use la opción -c o --configuration con dotnet pack.

  • 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 empaquetar una solución y se interrumpe porque uno o varios proyectos establecen explícitamente un valor para PackRelease, debe establecer explícitamente PackRelease en false 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 en true (o en cualquier otro valor) para quitarla. Si usa esta variable y cualquier proyecto define PackRelease, todos los proyectos deben definirla, o puede usar un archivo Directory.Build.Props. Esta variable afecta tanto a dotnet publish como a dotnet pack.

Vea también