Поделиться через


"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. Если старый проект в решении имеет PublishReleasefalseзначение, необходимо явно задать свойство 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 следует использовать конфигурацию.

  • Если вы публикуете решение и не работаете, вы можете явно задать PublishReleasetrue значение (или 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на .

См. также