Partager via


'dotnet publish' utilise la configuration Release

La dotnet publish commande utilise désormais la Release configuration au lieu de la Debug configuration par défaut si le framework cible est .NET 8 ou une version ultérieure.

Comportement précédent

Auparavant, dotnet publish utilisait la configuration Debug, à moins que la configuration n'ait été spécifiée explicitement ou que PublishRelease ait été définie à true.

La PublishRelease propriété a été ajoutée dans .NET 7 comme solution à ce changement radical. Auparavant, vous pouviez définir la DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS variable d’environnement à utiliser PublishRelease dans un projet qui faisait partie d’une solution Visual Studio.

Nouveau comportement

Si vous développez avec le Kit de développement logiciel (SDK) .NET 8 ou une version ultérieure, dotnet publish utilise par défaut la configuration Release pour les projets dont TargetFramework est défini sur net8.0 ou une version ultérieure. Si vous avez un script CI/CD, des tests ou du code dans lequel vous avez codé Debug en dur dans un chemin de sortie, cette modification peut interrompre votre flux de travail.

Si votre projet cible plusieurs versions, le nouveau comportement s’applique uniquement si vous spécifiez une infrastructure cible de .NET 8 ou ultérieure lorsque vous publiez (par exemple, à l’aide dotnet publish -f net8.0de ).

Pour les projets dans une solution :

  • dotnet publish peut publier tous les projets dans une solution Visual Studio si un fichier de solution est fourni. Pour les projets de solution qui ciblent .NET 8 ou version ultérieure, la valeur de PublishRelease est implicitement définie à true si elle est indéfinie. Toutefois, afin que dotnet publish détermine la configuration correcte à utiliser pour la solution, tous les projets de la solution doivent s'accorder sur leur valeur de PublishRelease. Si un projet plus ancien de la solution a PublishRelease défini sur false, vous devez également définir explicitement la propriété sur false pour les nouveaux projets .NET 8+.

  • Cette modification peut entraîner la régressation des performances dotnet publish , en particulier pour les solutions qui contiennent de nombreux projets. Pour résoudre ce problème, une nouvelle variable DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS d’environnement a été introduite.

  • La DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS variable d’environnement n’est plus reconnue.

Version introduite

.NET 8 Préversion 1

Type de changement cassant

Cette modification peut affecter la compatibilité de la source et est également un changement comportemental.

Raison de la modification

Dans la plupart des cas, lorsque vous publiez, vous souhaitez que votre code soit optimisé et que l’application reste plus petite en excluant les informations de débogage. Les clients ont demandé depuis longtemps que Release soit la configuration par défaut pour publish. En outre, Visual Studio a eu ce comportement depuis de nombreuses années.

La DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS variable d’environnement a été supprimée, car le comportement activé est désormais le comportement par défaut et le contrôle granulaire n’est plus nécessaire.

  • Pour désactiver entièrement le nouveau comportement, vous pouvez définir la DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE variable true d’environnement sur (ou toute autre valeur). Cette variable affecte à la fois dotnet publish et dotnet pack.

  • Pour spécifier explicitement la configuration de Debug pour la publication, utilisez l’option -c ou --configuration avec dotnet publish.

  • Si votre pipeline CI/CD est rompu en raison de chemins de sortie codés en dur, mettez à jour les chemins d'accès à Release à la place de Debug, désactivez le nouveau comportement à l'aide de la variable d'environnement DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE, ou spécifiez que la configuration Debug doit être utilisée.

  • Si vous publiez une solution et qu'elle est cassée, vous pouvez explicitement définir PublishRelease à true, ou utiliser false pour revenir au comportement précédent.

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

    Vous pouvez également spécifier la propriété dans un fichier Directory.Build.Props . Toutefois, si vous le définissez false dans ce fichier, vous devez toujours définir explicitement la propriété false dans les projets .NET 8+ dans la solution. De même, si certains projets définissent explicitement une valeur différente de la valeur du fichier Directory.Build.Props , la publication échoue.

  • Si vous publiez une solution et que les performances ont régressé, vous pouvez définir la DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS variable true d’environnement sur (ou toute autre valeur) pour supprimer la régression. Toutefois, si vous définissez cette variable et que votre solution contient un projet .NET 8+ et un projet qui cible .NET 7 ou une version antérieure, la publication échoue jusqu’à ce que tous les projets définissent PublishRelease. Cette variable affecte à la fois dotnet publish et dotnet pack.

Voir aussi