Compartir por


"dotnet pack" usa la configuración Release

El comando dotnet pack, que empaqueta el código en un paquete NuGet, ahora usa la Release configuración en lugar de la Debug configuración 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ías configurar la DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS variable de entorno para usar PackRelease en un proyecto que formaba parte de una solución de Visual Studio.

Nuevo comportamiento

Si está desarrollando con el SDK de .NET 8 o una versión posterior, dotnet pack usa la Release configuración 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 de 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 a usar, todos los proyectos de la solución deben coincidir en 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 solucionar esto, se ha introducido una nueva variable DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS de entorno.

  • La DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS variable de entorno ya no se reconoce.

Versión introducida

.NET 8 Preview 1

Tipo de cambio disruptivo

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, cuando crea un paquete, quiere que su código esté optimizado y pueda hacer que el paquete sea más pequeño al excluir la información de depuración.

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

  • Para deshabilitar completamente el nuevo comportamiento, puede establecer la DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE variable de entorno 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 de acceso a Release en lugar de Debug, deshabilite el nuevo comportamiento 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 estás empaquetando una solución y el rendimiento ha empeorado, puedes establecer la variable de entorno DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS a true (o cualquier otro valor) para eliminar la regresión. 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.

Consulte también