Поделиться через


"dotnet pack" использует конфигурацию Release

Командаdotnet pack, которая упаковывает код в пакет NuGet, теперь использует Release конфигурацию вместо Debug конфигурации по умолчанию.

Предыдущее поведение

Ранее dotnet pack использовал Debug конфигурацию, если конфигурация не была указана явным образом или PackRelease была установлена как true.

СвойствоPackRelease было добавлено в .NET 7 в качестве пути к этому критическому изменению. Ранее можно задать DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS переменную среды для использования PackRelease в проекте, который был частью решения Visual Studio.

Новое поведение

Если вы разрабатываете пакет SDK для .NET 8 или более поздней версии, dotnet pack использует Release конфигурацию по умолчанию для всех проектов. Если у вас есть скрипт CI/CD, тесты или код, где вы жестко закодировали Debug в выходной путь, это изменение может нарушить рабочий процесс. Кроме того, вы не сможете выполнять отладку упакованного приложения, если Debug конфигурация не была явно указана (например, с помощью dotnet pack --configuration Debug.

dotnet pack может упаковывать для нескольких идентификаторов целевой платформы (TFM) одновременно. Если проект предназначен для нескольких версий и имеет разные PackRelease значения для разных целевых платформ, может возникнуть конфликт, когда некоторые TFM упаковывают Release конфигурацию, а другие упаковывают Debug конфигурацию.

Для проектов в решении:

  • dotnet pack может упаковать все проекты в решении Visual Studio, если предоставлен файл решения. Для каждого проекта в рамках решения значение PackRelease, если оно не определено, устанавливается по умолчанию в true. Чтобы dotnet pack определить правильную конфигурацию, все проекты в решении должны договориться об одинаковом значении параметра PackRelease.

  • Это изменение может привести к снижению производительности dotnet pack, особенно для решений, содержащих множество проектов. Для решения этой проблемы появилась новая переменная DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS среды.

  • Переменная DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS среды больше не распознается.

Представленная версия

.NET 8( предварительная версия 1)

Тип разрушающего изменения

Это изменение может повлиять на совместимость источников и также является изменением поведения.

Причина изменения

В большинстве случаев при создании пакета необходимо оптимизировать код и уменьшить размер пакета, за исключением сведений об отладке.

Переменная DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS среды была удалена, так как включено поведение по умолчанию, и детализированный элемент управления больше не требуется.

  • Чтобы полностью отключить новое поведение, можно задать для переменной среды DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE значение true (или любое другое значение). Эта переменная влияет как на dotnet publish, так и на dotnet pack.

  • Чтобы явно указать Debug конфигурацию упаковки, используйте параметр -c или --configuration с dotnet pack.

  • Если ваш конвейер CI/CD нарушен из-за жестко заданных выходных путей Release вместо Debug, обновите пути, отключите новое поведение с помощью переменной среды DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE или укажите, что следует использовать конфигурацию Debug.

  • Если вы упаковываете решение, и оно повреждено, так как один или несколько проектов явно задают значение для PackRelease, необходимо явно задать значение PackRelease на false в каждом проекте.

    <PropertyGroup>
      <PackRelease>false</PackRelease>
    </PropertyGroup>
    
  • Если вы упаковываете решение и производительность снизилась, можно задать для переменной среды DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS значение true (или любое другое значение), чтобы устранить снижение производительности. Если вы используете эту переменную и любой проект определяет PackRelease, все проекты должны его определить или использовать файл Directory.Build.Props . Эта переменная влияет как на dotnet publish, так и на dotnet pack.

См. также