Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Команда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
.