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


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

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

Прежнее поведение

Ранее использовал Debug конфигурацию, dotnet pack если конфигурация не была указана явным образом или 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, необходимо явно задать PackReleasefalse значение в каждом проекте:

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

См. также