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