dotnet publishdotnet publish

Эта статья относится к следующему. ✔️ SDK для .NET Core 2.1 и более поздних версийThis article applies to: ✔️ .NET Core 2.1 SDK and later versions

nameName

dotnet publish — публикует приложение и его зависимости в папке для развертывания на размещающей системе.dotnet publish - Publishes the application and its dependencies to a folder for deployment to a hosting system.

Краткий обзорSynopsis

dotnet publish [<PROJECT>|<SOLUTION>] [-c|--configuration <CONFIGURATION>]
    [-f|--framework <FRAMEWORK>] [--force] [--interactive]
    [--manifest <PATH_TO_MANIFEST_FILE>] [--no-build] [--no-dependencies]
    [--no-restore] [--nologo] [-o|--output <OUTPUT_DIRECTORY>]
    [-p:PublishReadyToRun=true] [-p:PublishSingleFile=true] [-p:PublishTrimmed=true]
    [-r|--runtime <RUNTIME_IDENTIFIER>] [--self-contained [true|false]]
    [--no-self-contained] [-v|--verbosity <LEVEL>]
    [--version-suffix <VERSION_SUFFIX>]

dotnet publish -h|--help

ОписаниеDescription

dotnet publish компилирует приложение, считывает его зависимости, указанные в файле проекта, и публикует итоговый набор файлов в каталоге.dotnet publish compiles the application, reads through its dependencies specified in the project file, and publishes the resulting set of files to a directory. Выходные данные включают следующие ресурсы:The output includes the following assets:

  • Код на промежуточном языке (IL) в сборке с расширением DLL.Intermediate Language (IL) code in an assembly with a dll extension.
  • Файл .deps.json, содержащий все зависимости проекта.A .deps.json file that includes all of the dependencies of the project.
  • Файл .runtimeconfig.json, определяющий общую среду выполнения, которую ожидает приложение, а также другие параметры конфигурации для среды выполнения (например, тип сборки мусора).A .runtimeconfig.json file that specifies the shared runtime that the application expects, as well as other configuration options for the runtime (for example, garbage collection type).
  • Зависимости приложения, которые копируются из кэша NuGet в выходную папку.The application's dependencies, which are copied from the NuGet cache into the output folder.

Выходные данные команды dotnet publish готовы к развертыванию в размещающей системе (например, на сервере, ПК, Mac, ноутбуке) для выполнения.The dotnet publish command's output is ready for deployment to a hosting system (for example, a server, PC, Mac, laptop) for execution. Это единственный официальный способ подготовить приложение к развертыванию.It's the only officially supported way to prepare the application for deployment. В зависимости от указанного в проекте типа развертывания размещающая система может как иметь, так и не иметь общую среду выполнения .NET Core.Depending on the type of deployment that the project specifies, the hosting system may or may not have the .NET Core shared runtime installed on it. Дополнительные сведения см. в статье Публикация приложений .NET Core с помощью .NET Core CLI.For more information, see Publish .NET Core apps with the .NET Core CLI.

Неявное восстановлениеImplicit restore

Вам не нужно выполнять команду dotnet restore, так как она выполняется неявно всеми командами, которые требуют восстановления, например dotnet new, dotnet build, dotnet run, dotnet test, dotnet publish и dotnet pack.You don't have to run dotnet restore because it's run implicitly by all commands that require a restore to occur, such as dotnet new, dotnet build, dotnet run, dotnet test, dotnet publish, and dotnet pack. Чтобы отключить неявное восстановление, используйте параметр --no-restore.To disable implicit restore, use the --no-restore option.

Команду dotnet restore по-прежнему удобно использовать в некоторых сценариях, где необходимо явное восстановление, например в сборках с использованием непрерывной интеграции в Azure DevOps Services или системах сборки, где требуется явно контролировать время восстановления.The dotnet restore command is still useful in certain scenarios where explicitly restoring makes sense, such as continuous integration builds in Azure DevOps Services or in build systems that need to explicitly control when the restore occurs.

Сведения об управлении веб-каналами NuGet см. в документации по dotnet restore.For information about how to manage NuGet feeds, see the dotnet restore documentation.

MSBuildMSBuild

Команда dotnet publish вызывает метод MSBuild, который, в свою очередь, вызывает целевой объект Publish.The dotnet publish command calls MSBuild, which invokes the Publish target. Все параметры, передаваемые в dotnet publish, передаются далее в MSBuild.Any parameters passed to dotnet publish are passed to MSBuild. Параметры -c и -o сопоставляются со свойствами MSBuild Configuration и PublishDir соответственно.The -c and -o parameters map to MSBuild's Configuration and PublishDir properties, respectively.

Команда dotnet publish принимает параметры MSBuild, например -p для задания свойств или -l для определения средства ведения журнала.The dotnet publish command accepts MSBuild options, such as -p for setting properties and -l to define a logger. Например, можно задать свойство MSBuild, используя формат: -p:<NAME>=<VALUE>.For example, you can set an MSBuild property by using the format: -p:<NAME>=<VALUE>. Кроме того, задать связанные с публикацией свойства можно, сославшись на файл PUBXML, например:You can also set publish-related properties by referring to a .pubxml file, for example:

dotnet publish -p:PublishProfile=FolderProfile

В предыдущем примере используется файл FolderProfile.pubxml, расположенный в папке <project_folder>/Properties/PublishProfiles.The preceding example uses the FolderProfile.pubxml file that is found in the <project_folder>/Properties/PublishProfiles folder. Если указать путь и расширение файла при определении свойства PublishProfile, эти сведения будут игнорироваться.If you specify a path and file extension when setting the PublishProfile property, they are ignored. По умолчанию MSBuild выполняет поиск в папке Properties/PublishProfiles по расширению файла pubxml.MSBuild by default looks in the Properties/PublishProfiles folder and assumes the pubxml file extension. Чтобы указать путь и имя файла, включая расширение, определите свойство PublishProfileFullPath вместо свойства PublishProfile.To specify the path and filename including extension, set the PublishProfileFullPath property instead of the PublishProfile property.

Дополнительные сведения см. в следующих ресурсах:For more information, see the following resources:

АргументыArguments

  • PROJECT|SOLUTION

    Проект или решение для публикации.The project or solution to publish.

    • PROJECT — это путь или имя файла проекта C#, F# или Visual Basic либо путь к папке, которая содержит файл проекта C#, F# или Visual Basic.PROJECT is the path and filename of a C#, F#, or Visual Basic project file, or the path to a directory that contains a C#, F#, or Visual Basic project file. Если каталог не указан, по умолчанию используется текущий каталог.If the directory is not specified, it defaults to the current directory.

    • SOLUTION — это путь и имя для файла решения (расширение SLN) или путь к каталогу, содержащему файл решения.SOLUTION is the path and filename of a solution file (.sln extension), or the path to a directory that contains a solution file. Если каталог не указан, по умолчанию используется текущий каталог.If the directory is not specified, it defaults to the current directory. Доступно, начиная с пакета SDK для .NET Core 3.0.Available since .NET Core 3.0 SDK.

ПараметрыOptions

  • -c|--configuration <CONFIGURATION>

    Определяет конфигурацию сборки.Defines the build configuration. По умолчанию для большинства проектов используется Debug, но можно переопределить параметры конфигурации сборки в проекте.The default for most projects is Debug, but you can override the build configuration settings in your project.

  • -f|--framework <FRAMEWORK>

    Публикует приложение для указанной целевой платформы.Publishes the application for the specified target framework. Вам нужно указать целевую платформу в файле проекта.You must specify the target framework in the project file.

  • --force

    Принудительное разрешение всех зависимостей, даже если последнее восстановление прошло успешно.Forces all dependencies to be resolved even if the last restore was successful. Указание этого флага дает тот же результат, что удаление файла project.assets.json.Specifying this flag is the same as deleting the project.assets.json file.

  • -h|--help

    Выводит краткую справку по команде.Prints out a short help for the command.

  • --interactive

    Позволяет команде остановиться и дождаться, пока пользователь выполнит действие или введет данные.Allows the command to stop and wait for user input or action. Например, чтобы завершить проверку подлинности.For example, to complete authentication. Доступно, начиная с пакета SDK для .NET Core 3.0.Available since .NET Core 3.0 SDK.

  • --manifest <PATH_TO_MANIFEST_FILE>

    Определяет один или несколько целевых манифестов для усечения множества пакетов, публикуемых вместе с приложением.Specifies one or several target manifests to use to trim the set of packages published with the app. Файл манифеста является частью выходных данных команды dotnet store.The manifest file is part of the output of the dotnet store command. Чтобы указать несколько манифестов, добавьте параметр --manifest для каждого из них.To specify multiple manifests, add a --manifest option for each manifest.

  • --no-build

    Не выполняет сборку проекта перед публикацией.Doesn't build the project before publishing. Он также неявно задает флаг --no-restore.It also implicitly sets the --no-restore flag.

  • --no-dependencies

    Межпроектные ссылки игнорируются, и восстанавливается только корневой проект.Ignores project-to-project references and only restores the root project.

  • --nologo

    Скрывает загрузочный баннер или сообщение об авторских правах.Doesn't display the startup banner or the copyright message. Доступно, начиная с пакета SDK для .NET Core 3.0.Available since .NET Core 3.0 SDK.

  • --no-restore

    Не выполняет неявное восстановление при выполнении команды.Doesn't execute an implicit restore when running the command.

  • -o|--output <OUTPUT_DIRECTORY>

    Задает путь для выходного каталога.Specifies the path for the output directory.

    Если значение не указано, для исполняемого файла, зависящего от среды выполнения, а также для кроссплатформенных двоичных файлов по умолчанию используется путь [папка_файла_проекта]./bin/[конфигурация]/[платформа]/publish/ .If not specified, it defaults to [project_file_folder]./bin/[configuration]/[framework]/publish/ for a runtime-dependent executable and cross-platform binaries. Для автономного исполняемого файла по умолчанию используется путь [папка_файла_проекта]/bin/[конфигурация]/[платформа]/[среда выполения]/publish/ .It defaults to [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/ for a self-contained executable.

    Если в веб-проекте выходная папка находится в папке проекта, последовательное выполнение команд dotnet publish приводит к созданию вложенных выходных папок.In a web project, if the output folder is in the project folder, successive dotnet publish commands result in nested output folders. Например, если папкой проекта является MyProject, папкой выходных данных публикации — myproject/publish и вы дважды запускаете dotnet publish, при втором запуске файлы содержимого, такие как .config и .json помещаются в папку myproject/publish/publish.For example, if the project folder is myproject, and the publish output folder is myproject/publish, and you run dotnet publish twice, the second run puts content files such as .config and .json files in myproject/publish/publish. Чтобы избежать вложенности папок публикации, укажите папку публикации, которая не находится непосредственно в папке проекта, или исключите папку публикации из проекта.To avoid nesting publish folders, specify a publish folder that is not directly under the project folder, or exclude the publish folder from the project. Чтобы исключить папку публикации с именем publishoutput, добавьте следующий элемент в элемент PropertyGroup в файле .csproj.To exclude a publish folder named publishoutput, add the following element to a PropertyGroup element in the .csproj file:

    <DefaultItemExcludes>$(DefaultItemExcludes);publishoutput**</DefaultItemExcludes>
    
    • Пакет SDK для .NET Core 3.x и более поздних версий.NET Core 3.x SDK and later

      Если относительный путь указывается при публикации проекта, созданный выходной каталог задается относительно текущего рабочего каталога, а не расположения файла проекта.If a relative path is specified when publishing a project, the output directory generated is relative to the current working directory, not to the project file location.

      Если относительный путь указывается при публикации решения, все выходные данные для всех проектов помещаются в указанную папку относительно текущего рабочего каталога.If a relative path is specified when publishing a solution, all output for all projects goes into the specified folder relative to the current working directory. Для размещения выходных данных публикации в отдельные папки для каждого проекта укажите относительный путь, используя свойство PublishDir msbuild вместо параметра --output.To make publish output go to separate folders for each project, specify a relative path by using the msbuild PublishDir property instead of the --output option. Например, dotnet publish -p:PublishDir=.\publish отправляет выходные данные публикации для каждого проекта в папку publish, находящуюся в папке с файлом проекта.For example, dotnet publish -p:PublishDir=.\publish sends publish output for each project to a publish folder under the folder that contains the project file.

    • Пакет SDK для .NET Core 2.x.NET Core 2.x SDK

      Если относительный путь указывается при публикации проекта, созданный выходной каталог задается относительно расположения файла проекта, а не текущего рабочего каталога.If a relative path is specified when publishing a project, the output directory generated is relative to the project file location, not to the current working directory.

      Если относительный путь указывается при публикации решения, выходные данные каждого проекта помещаются в отдельную папку относительно расположения файла проекта.If a relative path is specified when publishing a solution, each project's output goes into a separate folder relative to the project file location. Если при публикации решения указан абсолютный путь, все выходные данные публикации для всех проектов размещаются в указанной папке.If an absolute path is specified when publishing a solution, all publish output for all projects goes into the specified folder.

  • -p:PublishReadyToRun=true

    Компилирует сборки приложений в формате ReadyToRun (R2R).Compiles application assemblies as ReadyToRun (R2R) format. R2R является разновидностью компиляции AOT.R2R is a form of ahead-of-time (AOT) compilation. Дополнительные сведения см. в разделе Образы ReadyToRun.For more information, see ReadyToRun images. Доступно, начиная с пакета SDK для .NET Core 3.0.Available since .NET Core 3.0 SDK.

    Рекомендуется указывать этот параметр в профиле публикации, а не в командной строке.We recommend that you specify this option in a publish profile rather than on the command line. Дополнительные сведения см. в разделе MSBuild.For more information, see MSBuild.

  • -p:PublishSingleFile=true

    Упаковывает приложение в однофайловый исполняемый файл для конкретной платформы.Packages the app into a platform-specific single-file executable. Исполняемый файл является самоизвлекаемым и содержит все зависимости (включая машинные), необходимые для запуска приложения.The executable is self-extracting and contains all dependencies (including native) that are required to run the app. При первом запуске приложение извлекается в каталог, который зависит от имени и идентификатора сборки приложения.When the app is first run, the application is extracted to a directory based on the app name and build identifier. Впоследствии запуск происходит быстрее.Startup is faster when the application is run again. Если версия не изменилась, приложению не нужно извлекать себя заново.The application doesn't need to extract itself a second time unless a new version is used. Доступно, начиная с пакета SDK для .NET Core 3.0.Available since .NET Core 3.0 SDK.

    Дополнительные сведения о публикации однофайловых исполняемых файлов см. в документе о разработке однофайловых пакетных установщиков.For more information about single-file publishing, see the single-file bundler design document.

    Рекомендуется указывать этот параметр в профиле публикации, а не в командной строке.We recommend that you specify this option in a publish profile rather than on the command line. Дополнительные сведения см. в разделе MSBuild.For more information, see MSBuild.

  • -p:PublishTrimmed=true

    Обрезает неиспользуемые библиотеки, чтобы уменьшить размер развертывания приложения при публикации автономного исполняемого файла.Trims unused libraries to reduce the deployment size of an app when publishing a self-contained executable. Дополнительные сведения см. в статье Обрезка автономных развертываний и исполняемых файлов.For more information, see Trim self-contained deployments and executables. Доступно, начиная с пакета SDK для .NET Core 3.0.Available since .NET Core 3.0 SDK.

    Рекомендуется указывать этот параметр в профиле публикации, а не в командной строке.We recommend that you specify this option in a publish profile rather than on the command line. Дополнительные сведения см. в разделе MSBuild.For more information, see MSBuild.

  • --self-contained [true|false]

    Публикует среду выполнения .NET Core вместе с приложением, что позволяет не устанавливать ее на конечном компьютере.Publishes the .NET Core runtime with your application so the runtime doesn't need to be installed on the target machine. Значение по умолчанию — true, если указан идентификатор среды выполнения и проект является исполняемым проектом (а не проектом библиотеки).Default is true if a runtime identifier is specified and the project is an executable project (not a library project). Дополнительные сведения см. в разделах Публикация приложения .NET Core и Публикация приложений .NET Core с помощью .NET Core CLI.For more information, see .NET Core application publishing and Publish .NET Core apps with the .NET Core CLI.

    Если этот параметр используется без указания true или false, по умолчанию применяется true.If this option is used without specifying true or false, the default is true. В этом случае не помещайте аргумент решения или проекта сразу после --self-contained, поскольку здесь ожидается true или false.In that case, don't put the solution or project argument immediately after --self-contained, because true or false is expected in that position.

  • --no-self-contained

    Эквивалент --self-contained false.Equivalent to --self-contained false. Доступно, начиная с пакета SDK для .NET Core 3.0.Available since .NET Core 3.0 SDK.

  • -r|--runtime <RUNTIME_IDENTIFIER>

    Публикует приложение для данной среды выполнения.Publishes the application for a given runtime. Список идентификаторов сред выполнения (RID) см. в каталоге RID.For a list of Runtime Identifiers (RIDs), see the RID catalog. Дополнительные сведения см. в разделах Публикация приложения .NET Core и Публикация приложений .NET Core с помощью .NET Core CLI.For more information, see .NET Core application publishing and Publish .NET Core apps with the .NET Core CLI.

  • -v|--verbosity <LEVEL>

    Задает уровень детализации команды.Sets the verbosity level of the command. Допустимые значения: q[uiet], m[inimal], n[ormal], d[etailed] и diag[nostic].Allowed values are q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]. Значение по умолчанию — minimal.Default value is minimal.

  • --version-suffix <VERSION_SUFFIX>

    Определяет суффикс версии для замены звездочки (*) в поле версия файла проекта.Defines the version suffix to replace the asterisk (*) in the version field of the project file.

ПримерыExamples

  • Создание кроссплатформенного двоичного файла, зависящего от среды выполнения, для проекта в текущем каталоге:Create a runtime-dependent cross-platform binary for the project in the current directory:

    dotnet publish
    

    Начиная с пакета SDK для .NET Core 3.0 этот пример также создает зависящий от среды выполнения исполняемый файл для текущей платформы.Starting with .NET Core 3.0 SDK, this example also creates a runtime-dependent executable for the current platform.

  • Создание автономного исполняемого файла для проекта в текущем каталоге для конкретной среды выполнения:Create a self-contained executable for the project in the current directory, for a specific runtime:

    dotnet publish --runtime osx.10.11-x64
    

    Идентификатор RID должен находиться в файле проекта.The RID must be in the project file.

  • Создание зависящего от среды выполнения исполняемого файла для проекта в текущем каталоге для конкретной платформы:Create a runtime-dependent executable for the project in the current directory, for a specific platform:

    dotnet publish --runtime osx.10.11-x64 --self-contained false
    

    Идентификатор RID должен находиться в файле проекта.The RID must be in the project file. Этот пример относится к пакету SDK для .NET Core 3.0 и более поздних версий.This example applies to .NET Core 3.0 SDK and later versions.

  • Публикация проекта в текущем каталоге для конкретной среды выполнения и целевой платформы:Publish the project in the current directory, for a specific runtime and target framework:

    dotnet publish --framework netcoreapp3.1 --runtime osx.10.11-x64
    
  • Публикация указанного файла проекта:Publish the specified project file:

    dotnet publish ~/projects/app1/app1.csproj
    
  • Публикация текущего приложения с обработкой только корневого проекта, без восстановления ссылок между проектами (P2P), во время операции восстановления:Publish the current application but don't restore project-to-project (P2P) references, just the root project during the restore operation:

    dotnet publish --no-dependencies
    

См. такжеSee also