Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Теперь dotnet publish
команда использует Release
конфигурацию вместо Debug
конфигурации по умолчанию, если целевая платформа — .NET 8 или более поздняя версия.
Предыдущее поведение
Ранее dotnet publish
использовал Debug
конфигурацию, если конфигурация не была указана явным образом или PublishRelease
была установлена как true
.
СвойствоPublishRelease
было добавлено в .NET 7 в качестве пути к этому критическому изменению. Ранее можно задать DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS
переменную среды для использования PublishRelease
в проекте, который был частью решения Visual Studio.
Новое поведение
Если вы разрабатываете с использованием .NET 8 SDK или более поздней версии, 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
.