"dotnet publish" использует конфигурацию выпуска
Теперь dotnet publish
команда использует Release
конфигурацию вместо Debug
конфигурации по умолчанию, если целевая платформа — .NET 8 или более поздняя версия.
Прежнее поведение
Ранее использовал Debug
конфигурацию, dotnet publish
если конфигурация не была указана явным образом или PublishRelease
не была задана.true
Свойство PublishRelease
было добавлено в .NET 7 в качестве пути к этому критическому изменению. Ранее можно задать DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS
переменную среды для использования PublishRelease
в проекте, который был частью решения Visual Studio.
Новое поведение
Если вы разрабатываете пакет SDK для .NET 8 или более позднюю версию, dotnet publish
использует Release
конфигурацию по умолчанию для проектов, для которых TargetFramework
задано net8.0
значение или более поздняя версия. Если у вас есть скрипт CI/CD, тесты или код, где вы жестко закодировали Debug
в выходной путь, это изменение может нарушить рабочий процесс.
Если проект предназначен для нескольких версий, новое поведение применяется только при указании целевой платформы .NET 8 или более поздней при публикации (например, с помощью dotnet publish -f net8.0
).
Для проектов в решении:
dotnet publish
может публиковать все проекты в решении Visual Studio, если он указан в файле решения. Для проектов решений, предназначенных для .NET 8 или более поздней версии, значениеPublishRelease
неявно устанавливаетсяtrue
, если оно не определено. Однако дляdotnet publish
определения правильной конфигурации, используемой для решения, все проекты в решении должны согласиться с их ценностьюPublishRelease
. Если старый проект в решении имеетPublishRelease
false
значение, необходимо явно задать свойствоfalse
для любых новых проектов .NET 8 и более поздних версий.Это изменение может привести к регрессии
dotnet publish
производительности, особенно для решений, содержащих множество проектов. Для решения этой проблемы появилась новая переменнаяDOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS
среды.Переменная
DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS
среды больше не распознается.
Представленные версии
.NET 8( предварительная версия 1)
Тип критического изменения
Это изменение может повлиять на совместимость источников и также является изменением поведения.
Причина изменения
В большинстве случаев при публикации необходимо оптимизировать код и сохранить приложение меньше, за исключением сведений об отладке. Клиенты попросили Release
быть конфигурацией по умолчанию в publish
течение длительного времени. Кроме того, Visual Studio уже много лет имеет такое поведение.
Переменная DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS
среды была удалена, так как включено поведение по умолчанию, и детализированный элемент управления больше не требуется.
Рекомендуемое действие
Чтобы полностью отключить новое поведение, можно задать
DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
для переменнойtrue
среды значение (или любое другое значение). Эта переменная влияет как на, такdotnet publish
иdotnet pack
на .Чтобы явно указать
Debug
конфигурацию для публикации, используйте-c
параметр или--configuration
параметрdotnet publish
.Если конвейер CI/CD нарушен из-за жестко закодированных выходных
Release
путей, обновите пути вместо этогоDebug
, отключите новое поведение с помощьюDOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
переменной среды или укажите, чтоDebug
следует использовать конфигурацию.Если вы публикуете решение и не работаете, вы можете явно задать
PublishRelease
true
значение (илиfalse
отменить изменения предыдущего поведения).<PropertyGroup> <PublishRelease>true</PublishRelease> </PropertyGroup>
Кроме того, можно указать свойство в файле Directory.Build.Props . Однако если он
false
задан в этом файле, необходимо явно задать свойствоfalse
в проектах .NET 8+ в решении. Аналогичным образом, если некоторые проекты явно задают значение, отличное от значения в файле Directory.Build.Props , публикация завершится ошибкой.Если вы публикуете решение и производительность регрессии, можно задать
DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS
для переменнойtrue
среды значение (или любое другое значение), чтобы удалить регрессию. Однако если задать эту переменную и решение содержит проект .NET 8+ и проект, предназначенный для .NET 7 или более ранней версии, публикация завершится ошибкой до тех пор, пока не будут определеныPublishRelease
все проекты. Эта переменная влияет как на, такdotnet publish
иdotnet pack
на .