"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
, необходимо явно задать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
на .