dotnet publish
Эта статья относится к: ✔️ пакету SDK для .NET Core 3.1 и более поздних версий
Имя.
dotnet publish
— публикует приложение и его зависимости в папке для развертывания на размещающей системе.
Краткие сведения
dotnet publish [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
[--artifacts-path <ARTIFACTS_DIR>]
[-c|--configuration <CONFIGURATION>] [--disable-build-servers]
[-f|--framework <FRAMEWORK>] [--force] [--interactive]
[--manifest <PATH_TO_MANIFEST_FILE>] [--no-build] [--no-dependencies]
[--no-restore] [--nologo] [-o|--output <OUTPUT_DIRECTORY>]
[--os <OS>] [-r|--runtime <RUNTIME_IDENTIFIER>]
[--sc|--self-contained [true|false]] [--no-self-contained]
[-s|--source <SOURCE>] [--tl:[auto|on|off]]
[--use-current-runtime, --ucr [true|false]]
[-v|--verbosity <LEVEL>] [--version-suffix <VERSION_SUFFIX>]
dotnet publish -h|--help
Description
dotnet publish
компилирует приложение, считывает его зависимости, указанные в файле проекта, и публикует итоговый набор файлов в каталоге. Выходные данные включают следующие ресурсы:
- Код на промежуточном языке (IL) в сборке с расширением DLL.
- Файл .deps.json, содержащий все зависимости проекта.
- Файл .runtimeconfig.json, определяющий общую среду выполнения, которую ожидает приложение, а также другие параметры конфигурации для среды выполнения (например, тип сборки мусора).
- Зависимости приложения, которые копируются из кэша NuGet в выходную папку.
Выходные данные команды dotnet publish
готовы к развертыванию в размещающей системе (например, на сервере, ПК, Mac, ноутбуке) для выполнения. Это единственный официальный способ подготовить приложение к развертыванию. В зависимости от указанного в проекте типа развертывания размещающая система может как иметь, так и не иметь общую среду выполнения .NET. Дополнительные сведения см. в статье Публикация приложений .NET с помощью .NET CLI.
Неявное восстановление
Вам не нужно выполнять команду dotnet restore
, так как она выполняется неявно всеми командами, которые требуют восстановления, например dotnet new
, dotnet build
, dotnet run
, dotnet test
, dotnet publish
и dotnet pack
. Чтобы отключить неявное восстановление, используйте параметр --no-restore
.
Команду dotnet restore
по-прежнему удобно использовать в некоторых сценариях, где необходимо явное восстановление, например в сборках с использованием непрерывной интеграции в Azure DevOps Services или системах сборки, где требуется явно контролировать время восстановления.
Сведения об управлении веб-каналами NuGet см. в документации по dotnet restore
.
MSBuild
Команда dotnet publish
вызывает метод MSBuild, который, в свою очередь, вызывает целевой объект Publish
. Если для свойства IsPublishable
задано значение false
в конкретном проекте, целевой объект Publish
не может быть вызван, а команда dotnet publish
запускает в проекте только неявную команду dotnet restore.
Все параметры, передаваемые в dotnet publish
, передаются далее в MSBuild. Параметры -c
и -o
сопоставляются со свойствами MSBuild Configuration
и PublishDir
соответственно.
Команда dotnet publish
принимает параметры MSBuild, например -p
для задания свойств или -l
для определения средства ведения журнала. Например, можно задать свойство MSBuild, используя формат: -p:<NAME>=<VALUE>
.
Pubxml-файлы
Вы также можете задать свойства, связанные с публикацией, ссылаясь на PUBXML-файл . Например:
dotnet publish -p:PublishProfile=FolderProfile
В предыдущем примере используется файл FolderProfile.pubxml , найденный в папке <project_folder>/Properties/PublishProfiles . Если при настройке PublishProfile
свойства указать путь и расширение файла, они игнорируются. По умолчанию MSBuild выполняет поиск в папке Properties/PublishProfiles по расширению файла pubxml. Чтобы указать путь и имя файла, включая расширение, определите свойство PublishProfileFullPath
вместо свойства PublishProfile
.
В PUBXML-файле:
PublishUrl
используется Visual Studio для обозначения целевого объекта публикации.PublishDir
используется интерфейсом командной строки для обозначения целевого объекта публикации.
Если вы хотите, чтобы сценарий работал во всех местах, можно инициализировать оба этих свойства в одном и том же значении в PUBXML-файле . При разрешении проблемы GitHub dotnet/sdk#20931 необходимо задать только одно из этих свойств.
Некоторые свойства в PUBXML-файле учитываются только Visual Studio и не влияют на dotnet publish
них. Мы работаем над тем, чтобы сделать интерфейс командной строки более в соответствии с поведением Visual Studio. Но некоторые свойства никогда не будут использоваться интерфейсом командной строки. Интерфейс командной строки и Visual Studio выполняют аспекты публикации и dotnet/sdk#29817 , чтобы добавить поддержку дополнительных свойств, связанных с этим. Но интерфейс командной строки не выполняет аспект автоматизации развертывания публикации, а свойства, связанные с ними, не поддерживаются. Наиболее заметные свойства PUBXML , которые не поддерживаются dotnet publish
, являются следующими, которые влияют на сборку:
LastUsedBuildConfiguration
Configuration
Platform
LastUsedPlatform
TargetFramework
TargetFrameworks
RuntimeIdentifier
RuntimeIdentifiers
свойства MSBuild
Следующие свойства MSBuild изменяют выходные данные dotnet publish
.
PublishReadyToRun
Компилирует сборки приложений в формате ReadyToRun (R2R). R2R является разновидностью компиляции AOT. Дополнительные сведения см. в разделе Образы ReadyToRun.
Чтобы просмотреть предупреждения о недостающих зависимостях, из-за которых могут возникать сбои в среде выполнения, используйте
PublishReadyToRunShowWarnings=true
.Параметр
PublishReadyToRun
рекомендуется указывать в профиле публикации, а не в командной строке.PublishSingleFile
Упаковывает приложение в однофайловый исполняемый файл для конкретной платформы. Дополнительные сведения о публикации однофайловых исполняемых файлов см. в документе о разработке однофайловых пакетных установщиков.
Рекомендуется указывать этот параметр в файле проекта, а не в командной строке.
PublishTrimmed
Обрезает неиспользуемые библиотеки, чтобы уменьшить размер развертывания приложения при публикации автономного исполняемого файла. Дополнительные сведения см. в статье Обрезка автономных развертываний и исполняемых файлов. Доступно начиная с пакета SDK для .NET 6.
Рекомендуется указывать этот параметр в файле проекта, а не в командной строке.
Дополнительные сведения см. на следующих ресурсах:
- Справочник по командной строке MSBuild
- Профили публикации Visual Studio (.pubxml) для развертывания приложений ASP.NET Core
- dotnet msbuild
Скачивание манифестов рабочих нагрузок
При выполнении этой команды запускается асинхронное фоновое скачивание оповестительных манифестов для рабочих нагрузок. Если скачивание по-прежнему выполняется по завершении этой команды, оно останавливается. Дополнительные сведения см. в разделе Оповестительные манифесты.
Аргументы
PROJECT|SOLUTION
Проект или решение для публикации.
PROJECT
— это путь или имя файла проекта C#, F# или Visual Basic либо путь к папке, которая содержит файл проекта C#, F# или Visual Basic. Если каталог не указан, по умолчанию используется текущий каталог.SOLUTION
— это путь и имя для файла решения (расширение SLN) или путь к каталогу, содержащему файл решения. Если каталог не указан, по умолчанию используется текущий каталог.
Параметры
-a|--arch <ARCHITECTURE>
Указывает целевую архитектуру. Это сокращенный синтаксис для настройки идентификатора среды выполнения (RID), где указанное значение объединяется с RID по умолчанию. Например, если на компьютере
win-x64
указать--arch x86
, идентификатору RID присваивается значениеwin-x86
. При использовании этого параметра не используйте параметр-r|--runtime
. Этот параметр доступен с выпуска .NET 6, предварительная версия 7.
--artifacts-path <ARTIFACTS_DIR>
Все выходные файлы сборки из выполняемой команды будут отправляться в вложенные папки в соответствии с указанным путем, разделенным проектом. Дополнительные сведения см. в разделе "Макет выходных данных артефактов". Доступно с пакета SDK для .NET 8.
-c|--configuration <CONFIGURATION>
Определяет конфигурацию сборки. Если вы разрабатываете пакет SDK для .NET 8 или более позднюю версию, команда использует
Release
конфигурацию по умолчанию для проектов, для которых targetFramework имеетnet8.0
или более позднюю версию. Конфигурация сборки по умолчанию используетсяDebug
для более ранних версий пакета SDK и для более ранних целевых платформ. Вы можете переопределить значение по умолчанию в параметрах проекта или с помощью этого параметра. Дополнительные сведения см. в разделе "Dotnet publish" использует конфигурацию выпуска и "dotnet pack" использует конфигурацию выпуска.
--disable-build-servers
Принудительно заставляет команду игнорировать все постоянные серверы сборки. Этот параметр предоставляет согласованный способ отключить все использование кэширования сборки, которая заставляет сборку с нуля. Сборка, которая не зависит от кэшей, полезна, когда кэши могут быть повреждены или неверны по какой-то причине. Доступно с пакета SDK для .NET 7.
-f|--framework <FRAMEWORK>
Публикует приложение для указанной целевой платформы. Вам нужно указать целевую платформу в файле проекта.
--force
Принудительное разрешение всех зависимостей, даже если последнее восстановление прошло успешно. Указание этого флага дает тот же результат, что удаление файла project.assets.json.
-?|-h|--help
Выводит описание использования команды.
--interactive
Позволяет команде остановиться и дождаться, пока пользователь выполнит действие или введет данные. Например, чтобы завершить проверку подлинности. Доступно, начиная с пакета SDK для .NET Core 3.0.
--manifest <PATH_TO_MANIFEST_FILE>
Определяет один или несколько целевых манифестов для усечения множества пакетов, публикуемых вместе с приложением. Файл манифеста является частью выходных данных команды
dotnet store
. Чтобы указать несколько манифестов, добавьте параметр--manifest
для каждого из них.--no-build
Не выполняет сборку проекта перед публикацией. Он также неявно задает флаг
--no-restore
.--no-dependencies
Межпроектные ссылки игнорируются, и восстанавливается только корневой проект.
--nologo
Скрывает загрузочный баннер или сообщение об авторских правах.
--no-restore
Не выполняет неявное восстановление при выполнении команды.
-o|--output <OUTPUT_DIRECTORY>
Задает путь для выходного каталога.
Если значение не указано, для исполняемого файла, зависящего от платформы, а также для кроссплатформенных двоичных файлов по умолчанию используется путь [папка_файла_проекта]/bin/[конфигурация]/[платформа]/publish/. Для автономного исполняемого файла по умолчанию используется путь [папка_файла_проекта]/bin/[конфигурация]/[платформа]/[среда выполения]/publish/.
Если в веб-проекте выходная папка находится в папке проекта, последовательное выполнение команд
dotnet publish
приводит к созданию вложенных выходных папок. Например, если папкой проекта является MyProject, папкой выходных данных публикации — myproject/publish и вы дважды запускаетеdotnet publish
, при втором запуске файлы содержимого, такие как .config и .json помещаются в папку myproject/publish/publish. Чтобы избежать вложенных папок публикации, укажите папку публикации, которая не находится непосредственно в папке проекта, или исключите папку публикации из проекта. Чтобы исключить папку публикации с именем publishoutput, добавьте следующий элемент в элементPropertyGroup
в файле .csproj.<DefaultItemExcludes>$(DefaultItemExcludes);publishoutput**</DefaultItemExcludes>
Пакет SDK для .NET 7.0.200 и более поздних версий
Если указать
--output
параметр при выполнении этой команды в решении, интерфейс командной строки выдает предупреждение (ошибка в версии 7.0.200) из-за неясной семантики выходного пути. Этот--output
параметр запрещен, так как все выходные данные всех встроенных проектов будут скопированы в указанный каталог, который не совместим с многоцелыми проектами, а также проектами с различными версиями прямых и транзитивных зависимостей. Дополнительные сведения см. в разделе "Параметр уровня--output
решения" больше недействителен для команд, связанных со сборкой.Пакет SDK для .NET Core 3.x и более поздних версий
Если относительный путь указывается при публикации проекта, созданный выходной каталог задается относительно текущего рабочего каталога, а не расположения файла проекта.
Если относительный путь указывается при публикации решения, все выходные данные для всех проектов помещаются в указанную папку относительно текущего рабочего каталога. Для размещения выходных данных публикации в отдельные папки для каждого проекта укажите относительный путь, используя свойство
PublishDir
msbuild вместо параметра--output
. Например,dotnet publish -p:PublishDir=.\publish
отправляет выходные данные публикации для каждого проекта в папкуpublish
, находящуюся в папке с файлом проекта.Пакет SDK для .NET Core 2.x
Если относительный путь указывается при публикации проекта, созданный выходной каталог задается относительно расположения файла проекта, а не текущего рабочего каталога.
Если относительный путь указывается при публикации решения, выходные данные каждого проекта помещаются в отдельную папку относительно расположения файла проекта. Если при публикации решения указан абсолютный путь, все выходные данные публикации для всех проектов размещаются в указанной папке.
--os <OS>
Позволяет указать целевую операционную систему. Это сокращенный синтаксис для настройки идентификатора среды выполнения (RID), где указанное значение объединяется с RID по умолчанию. Например, если на компьютере
win-x64
указать--os linux
, идентификатору RID присваивается значениеlinux-x64
. При использовании этого параметра не используйте параметр-r|--runtime
. Доступно с .NET 6.
--sc|--self-contained [true|false]
Публикует среду выполнения .NET вместе с приложением, что позволяет не устанавливать ее на конечном компьютере. Значение по умолчанию —
true
, если указан идентификатор среды выполнения и проект является исполняемым проектом (а не проектом библиотеки). Дополнительные сведения см. в разделах Публикация приложения .NET и Публикация приложений .NET с помощью .NET CLI.Если этот параметр используется без указания
true
илиfalse
, по умолчанию применяетсяtrue
. В этом случае не помещайте аргумент решения или проекта сразу после--self-contained
, поскольку здесь ожидаетсяtrue
илиfalse
.--no-self-contained
Эквивалент
--self-contained false
.--source <SOURCE>
URI источника пакета NuGet для использования во время операции восстановления.
-r|--runtime <RUNTIME_IDENTIFIER>
Публикует приложение для данной среды выполнения. Список идентификаторов сред выполнения (RID) см. в каталоге RID. Дополнительные сведения см. в разделах Публикация приложения .NET и Публикация приложений .NET с помощью .NET CLI. При использовании этого параметра используйте также
--self-contained
или--no-self-contained
.
--tl:[auto|on|off]
Указывает, следует ли использовать средство ведения журнала терминала для выходных данных сборки. Значением по умолчанию является
auto
то, что сначала проверяет среду перед включением ведения журнала терминалов. Среда проверка проверяет, может ли терминал использовать современные выходные функции и не использует перенаправленные стандартные выходные данные перед включением нового средства ведения журнала.on
пропускает проверка среды и включает ведение журнала терминалов.off
пропускает среду проверка и использует средство ведения журнала консоли по умолчанию.Средство ведения журнала терминала показывает этап восстановления, за которым следует этап сборки. На каждом этапе в нижней части терминала отображаются строительные проекты. Каждый проект, который создает выходные данные как целевого объекта MSBuild, который в настоящее время создается, так и время, затраченное на этот целевой объект. Эти сведения можно найти, чтобы узнать больше о сборке. После завершения сборки проекта записывается один раздел "сборка завершена", который записывает:
- Имя созданного проекта.
- Целевая платформа (если она используется с несколькими целевыми объектами).
- Состояние этой сборки.
- Основные выходные данные этой сборки (которая гиперссылок).
- Все диагностика, созданные для этого проекта.
Этот параметр доступен начиная с .NET 8.
--use-current-runtime, --ucr [true|false]
RuntimeIdentifier
Задает переносимуюRuntimeIdentifier
платформу на основе одного из компьютеров. Это происходит неявно с свойствами, которые требуютRuntimeIdentifier
, напримерSelfContained
, ,PublishAot
PublishSelfContained
,PublishSingleFile
иPublishReadyToRun
. Если для свойства задано значение false, это неявное разрешение больше не будет происходить.
-v|--verbosity <LEVEL>
Задает уровень детализации команды. Допустимые значения:
q[uiet]
,m[inimal]
,n[ormal]
,d[etailed]
иdiag[nostic]
. Значение по умолчанию —minimal
. Дополнительные сведения см. в разделе LoggerVerbosity.
--version-suffix <VERSION_SUFFIX>
Определяет суффикс версии для замены звездочки (
*
) в поле версия файла проекта.
Примеры
Создание кроссплатформенного двоичного файла, зависящего от платформы, для проекта в текущем каталоге:
dotnet publish
Начиная с пакета SDK для .NET Core 3.0 этот пример также создает зависящий от платформы исполняемый файл для текущей платформы.
Создание автономного исполняемого файла для проекта в текущем каталоге для конкретной среды выполнения:
dotnet publish --runtime osx-x64
Идентификатор RID должен находиться в файле проекта.
Создание зависящего от платформы исполняемого файла для проекта в текущем каталоге для конкретной платформы:
dotnet publish --runtime osx-x64 --self-contained false
Идентификатор RID должен находиться в файле проекта. Этот пример относится к пакету SDK для .NET Core 3.0 и более поздних версий.
Публикация проекта в текущем каталоге для конкретной среды выполнения и целевой платформы:
dotnet publish --framework net8.0 --runtime osx-x64
Публикация указанного файла проекта:
dotnet publish ~/projects/app1/app1.csproj
Публикация текущего приложения с обработкой только корневого проекта, без восстановления ссылок между проектами (P2P), во время операции восстановления:
dotnet publish --no-dependencies
См. также
- Общие сведения о публикации приложений .NET
- Публикация приложений .NET с помощью интерфейса командной строки
- Целевые платформы
- Каталог идентификаторов сред выполнения (RID)
- Контейнеризация приложения .NET с помощью dotnet publish
- Работа с заверением macOS Catalina
- Структура каталогов опубликованного приложения
- Справочник по командной строке MSBuild
- Профили публикации Visual Studio (.pubxml) для развертывания приложений ASP.NET Core
- dotnet msbuild
- Обрезка автономных развертываний