Публикации приложений .NET Core с помощью интерфейса командной строкиPublish .NET Core apps with the CLI

В этой статье рассказывается, как опубликовать приложение .NET Core из командной строки.This article demonstrates how you can publish your .NET Core application from the command line. Платформа .NET Core предоставляет три способа публикации приложений..NET Core provides three ways to publish your applications. Зависящее от платформы развертывание создает кроссплатформенный DLL-файл, который использует локально установленную среду выполнения .NET Core.Framework-dependent deployment produces a cross-platform .dll file that uses the locally installed .NET Core runtime. Зависящий от платформы исполняемый файл использует локально установленную среду выполнения .NET Core.Framework-dependent executable produces a platform-specific executable that uses the locally installed .NET Core runtime. Автономный исполняемый файл создает зависящий от платформы исполняемый файл и включает локальную копию среды выполнения .NET Core.Self-contained executable produces a platform-specific executable and includes a local copy of the .NET Core runtime.

Общие сведения о режимах развертывания см. в разделе Развертывание приложений .NET Core.For an overview of these publishing modes, see .NET Core Application Deployment.

Ищете справку по работе с командной строкой?Looking for some quick help on using the CLI? В следующей таблице показаны некоторые примеры публикации приложений.The following table shows some examples of how to publish your app. Вы можете указать целевую платформу с помощью параметра -f <TFM> или путем редактирования файла проекта.You can specify the target framework with the -f <TFM> parameter or by editing the project file. Дополнительные сведения см. в статье Основы публикации.For more information, see Publishing basics.

Режим публикацииPublish Mode Версия SDKSDK Version КомандаCommand
развертывание, зависящее от платформы;Framework-dependent deployment 2.x2.x dotnet publish -c Release
Исполняемый файл, зависящий от платформыFramework-dependent executable 2.22.2 dotnet publish -c Release -r <RID> --self-contained false
3.03.0 dotnet publish -c Release -r <RID> --self-contained false
3.0*3.0* dotnet publish -c Release
автономное развертывание;Self-contained deployment 2.12.1 dotnet publish -c Release -r <RID> --self-contained true
2.22.2 dotnet publish -c Release -r <RID> --self-contained true
3.03.0 dotnet publish -c Release -r <RID> --self-contained true

* При использовании пакета SDK версии 3.0 режим публикации по умолчанию при выполнении базовой команды dotnet publish предусматривает использование зависящего от платформы исполняемого файла.* When using SDK version 3.0, framework-dependent executable is the default publishing mode when running the basic dotnet publish command. Это относится только к проектам, предназначенным для .NET Core 2.1 или .NET Core 3.0.This only applies when the project targets either .NET Core 2.1 or .NET Core 3.0.

Основы публикацииPublishing basics

Параметр <TargetFramework> файла проекта указывает целевую платформу по умолчанию при публикации приложения.The <TargetFramework> setting of the project file specifies the default target framework when you publish your app. Можно изменить целевую платформу на любой допустимый моникер целевой платформы (TFM).You can change the target framework to any valid Target Framework Moniker (TFM). Например, если проект использует <TargetFramework>netcoreapp2.2</TargetFramework>, создается двоичный файл, предназначенный для .NET Core 2.2.For example, if your project uses <TargetFramework>netcoreapp2.2</TargetFramework>, a binary that targets .NET Core 2.2 is created. TFM, указанный в этом параметре, является целевым объектом по умолчанию, используемым командой dotnet publish.The TFM specified in this setting is the default target used by the dotnet publish command.

Если вам нужно охватить несколько платформ, можно задать в параметре <TargetFrameworks> несколько значений TFM, разделенных точками с запятой.If you want to target more than one framework, you can set the <TargetFrameworks> setting to more than one TFM value separated by a semicolon. Вы можете опубликовать одну из платформ с помощью команды dotnet publish -f <TFM>.You can publish one of the frameworks with the dotnet publish -f <TFM> command. Например, если вы используете <TargetFrameworks>netcoreapp2.1;netcoreapp2.2</TargetFrameworks> и запускаете dotnet publish -f netcoreapp2.1, создается двоичный файл, предназначенный для .NET Core 2.1.For example, if you have <TargetFrameworks>netcoreapp2.1;netcoreapp2.2</TargetFrameworks> and run dotnet publish -f netcoreapp2.1, a binary that targets .NET Core 2.1 is created.

Если не указано иное, выходной каталог команды dotnet publish — ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/.Unless otherwise set, the output directory of the dotnet publish command is ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/. Значение по умолчанию для режима BUILD-CONFIGURATIONОтладка, если с помощью параметра -c не задано иное.The default BUILD-CONFIGURATION mode is Debug unless changed with the -c parameter. Например dotnet publish -c Release -f netcoreapp2.1 публикует в myfolder/bin/Release/netcoreapp2.1/publish/.For example, dotnet publish -c Release -f netcoreapp2.1 publishes to myfolder/bin/Release/netcoreapp2.1/publish/.

Если вы используете .NET Core SDK 3.0, режим публикации по умолчанию для приложений, нацеленных на .NET Core версии 2.1, 2.2 или 3.0, — это исполняемый файл, зависящий от платформы.If you use .NET Core SDK 3.0, the default publish mode for apps that target .NET Core versions 2.1, 2.2, or 3.0 is framework-dependent executable.

Если вы используете .NET Core SDK 2.1, режим публикации по умолчанию для приложений, нацеленных на .NET Core версии 2.1 или 2.2, — это развертывание, зависящее от платформы.If you use .NET Core SDK 2.1, the default publish mode for apps that target .NET Core versions 2.1, 2.2 is framework-dependent deployment.

Машинные зависимостиNative dependencies

Если приложение имеет машинные зависимости, оно не может выполняться в другой операционной системе.If your app has native dependencies, it may not run on a different operating system. Например, если приложение использует нативный интерфейс Windows API, оно не будет работать в macOS или Linux.For example, if your app uses the native Windows API, it won't run on macOS or Linux. Необходимо написать код для конкретной платформы и скомпилировать исполняемый файл для каждой платформы.You would need to provide platform-specific code and compile an executable for each platform.

Учтите также, что если ссылка на библиотеку имеет машинную зависимость, приложения могут не выполняться на всех платформах.Consider also, if a library you referenced has a native dependency, your app may not run on every platform. Тем не менее возможно, что пакет NuGet, на который вы ссылаетесь, включает версии для конкретных платформ, которые разрешают машинные зависимости за вас.However, it's possible a NuGet package you're referencing has included platform-specific versions to handle the required native dependencies for you.

При распространении приложения с машинными зависимостями может потребоваться использовать dotnet publish -r <RID> для указания целевой платформы публикации.When distributing an app with native dependencies, you may need to use the dotnet publish -r <RID> switch to specify the target platform you want to publish for. Список идентификаторов сред выполнения см. в каталоге идентификаторов сред выполнения.For a list of runtime identifiers, see Runtime Identifier (RID) catalog.

Дополнительные сведения о двоичных файлах для определенной платформы см. в разделах Исполняемый файл, зависящий от платформы и Автономное развертывание.More information about platform-specific binaries is covered in the Framework-dependent executable and Self-contained deployment sections.

Пример приложенияSample app

Чтобы изучить команды публикации, можно использовать следующее приложение.You can use the following app to explore the publishing commands. Приложение можно создать, выполнив следующие команды в окне терминала:The app is created by running the following commands in your terminal:

mkdir apptest1
cd apptest1
dotnet new console
dotnet add package Figgle

Файл Program.cs или Program.vb, созданный с помощью шаблона консоли, необходимо изменить на следующее:The Program.cs or Program.vb file that is generated by the console template needs to be changed to the following:

using System;

namespace apptest1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"));
        }
    }
}
Imports System

Module Program
    Sub Main(args As String())
        Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"))
    End Sub
End Module

При выполнении приложения (dotnet run) отображается следующий результат:When you run the app (dotnet run), the following output is displayed:

  _   _      _ _         __        __         _     _ _
 | | | | ___| | | ___    \ \      / /__  _ __| | __| | |
 | |_| |/ _ \ | |/ _ \    \ \ /\ / / _ \| '__| |/ _` | |
 |  _  |  __/ | | (_) |    \ V  V / (_) | |  | | (_| |_|
 |_| |_|\___|_|_|\___( )    \_/\_/ \___/|_|  |_|\__,_(_)
                     |/

развертывание, зависящее от платформы;Framework-dependent deployment

В случае командной строки пакета SDK для .NET Core 2.x зависящее от платформы развертывание (FDD) является режимом по умолчанию для базовой команды dotnet publish.For the .NET Core SDK 2.x CLI, framework-dependent deployment (FDD) is the default mode for the basic dotnet publish command.

При публикации приложения в качестве FDD файл <PROJECT-NAME>.dll создается в папке ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/.When you publish your app as an FDD, a <PROJECT-NAME>.dll file is created in the ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/ folder. Чтобы запустить приложение, перейдите к папке выходных данных и используйте команду dotnet <PROJECT-NAME>.dll.To run your app, navigate to the output folder and use the dotnet <PROJECT-NAME>.dll command.

Ваше приложение будет настроено для конкретной версии .NET Core.Your app is configured to target a specific version of .NET Core. Целевую среду выполнения .NET Core необходимо установить на компьютере, где вы хотите запустить приложение.That targeted .NET Core runtime is required to be on the machine where you want to run your app. Например, если приложение предназначено для .NET Core 2.2, то на любом компьютере, где работает ваше приложение, должна быть установлена среда выполнения .NET Core 2.2.For example, if your app targets .NET Core 2.2, any machine that your app runs on must have the .NET Core 2.2 runtime installed. Как уже говорилось в разделе Основы публикации, можно изменить файл проекта для изменения целевой платформы по умолчанию или для выбора нескольких платформ.As stated in the Publishing basics section, you can edit your project file to change the default target framework or to target more than one framework.

Публикация FDD создает приложение, которое автоматически использует новейшую версию исправлений безопасности .NET Core, доступных в системе, где выполняется приложение.Publishing an FDD creates an app that automatically rolls-forward to the latest .NET Core security patch available on the system that runs the app. Дополнительные сведения о привязке версий во время компиляции см. в разделе Выбор используемой версии .NET Core.For more information on version binding at compile time, see Select the .NET Core version to use.

Исполняемый файл, зависящий от платформыFramework-dependent executable

В случае интерфейса командной строки пакета SDK для .NET Core 3.x зависящий от платформы исполняемый файл (FDE) является режимом по умолчанию для базовой команды dotnet publish.For the .NET Core SDK 3.x CLI, framework-dependent executable (FDE) is the default mode for the basic dotnet publish command. Указывать другие параметры, если вы будете работать в текущей операционной системе, не нужно.You don't need to specify any other parameters as long as you want to target the current operating system.

В этом режиме для размещения кроссплатформенного приложения создается исполняемый файл основного приложения для конкретной платформы.In this mode, a platform-specific executable host is created to host your cross-platform app. Этот режим аналогичен FDD, так как FDD требуется основное приложение в виде команды dotnet.This mode is similar to FDD as FDD requires a host in the form of the dotnet command. Имя исполняемого файла основного приложения зависит от платформы и обычно похоже на <PROJECT-FILE>.exe.The host executable filename varies per platform, and is named something similar to <PROJECT-FILE>.exe. Вы можете запустить этот исполняемый файл напрямую вместо вызова метода dotnet <PROJECT-FILE>.dll (который по-прежнему допустим для запуска приложения).You can run this executable directly instead of calling dotnet <PROJECT-FILE>.dll which is still an acceptable way to run the app.

Ваше приложение будет настроено для конкретной версии .NET Core.Your app is configured to target a specific version of .NET Core. Целевую среду выполнения .NET Core необходимо установить на компьютере, где вы хотите запустить приложение.That targeted .NET Core runtime is required to be on the machine where you want to run your app. Например, если приложение предназначено для .NET Core 2.2, то на любом компьютере, где работает ваше приложение, должна быть установлена среда выполнения .NET Core 2.2.For example, if your app targets .NET Core 2.2, any machine that your app runs on must have the .NET Core 2.2 runtime installed. Как уже говорилось в разделе Основы публикации, можно изменить файл проекта для изменения целевой платформы по умолчанию или для выбора нескольких платформ.As stated in the Publishing basics section, you can edit your project file to change the default target framework or to target more than one framework.

Публикация FDE создает приложение, которое автоматически использует новейшую версию исправлений безопасности .NET Core, доступных в системе, где выполняется приложение.Publishing an FDE creates an app that automatically rolls-forward to the latest .NET Core security patch available on the system that runs the app. Дополнительные сведения о привязке версий во время компиляции см. в разделе Выбор используемой версии .NET Core.For more information on version binding at compile time, see Select the .NET Core version to use.

Вы обязаны (за исключением случая .NET Core 3.x при выборе текущей платформы как целевой) использовать перечисленные ниже параметры с командой dotnet publish для публикации FDE:You must (except for .NET Core 3.x when you target the current platform) use the following switches with the dotnet publish command to publish an FDE:

  • -r <RID> — этот параметр использует идентификатор (RID) для указания целевой платформы.-r <RID> This switch uses an identifier (RID) to specify the target platform. Список идентификаторов сред выполнения см. в каталоге идентификаторов сред выполнения.For a list of runtime identifiers, see Runtime Identifier (RID) catalog.

  • --self-contained false — этот параметр указывает пакету SDK для .NET Core, что исполняемый файл нужно создать как FDE.--self-contained false This switch tells the .NET Core SDK to create an executable as an FDE.

При использовании параметра -r путь к папке выходных данных изменяется на ./bin/<BUILD-CONFIGURATION>/<TFM>/<RID>/publish/Whenever you use the -r switch, the output folder path changes to: ./bin/<BUILD-CONFIGURATION>/<TFM>/<RID>/publish/

Если вы используете пример приложения, запустите dotnet publish -f netcoreapp2.2 -r win10-x64 --self-contained false.If you use the example app, run dotnet publish -f netcoreapp2.2 -r win10-x64 --self-contained false. Эта команда создает следующий исполняемый файл: ./bin/Debug/netcoreapp2.2/win10-x64/publish/apptest1.exeThis command creates the following executable: ./bin/Debug/netcoreapp2.2/win10-x64/publish/apptest1.exe

Примечание

Можно уменьшить размер развертывания, включив инвариантный режим глобализации.You can reduce the total size of your deployment by enabling globalization invariant mode. Он подходит для приложений, которые не имеют глобальных параметров и могут использовать соглашения о форматировании, соглашения о регистре, сравнение строк и порядок сортировки для инвариантного языка и региональных параметров.This mode is useful for applications that are not globally aware and that can use the formatting conventions, casing conventions, and string comparison and sort order of the invariant culture. Дополнительные сведения об инвариантном режиме глобализации и том, как его включить, см. в статье об инвариантном режиме глобализации .NET Core.For more information about globalization invariant mode and how to enable it, see .NET Core Globalization Invariant Mode.

автономное развертывание;Self-contained deployment

При публикации автономного развертывания (SCD) пакет SDK для .NET Core создает исполняемый файл для конкретной платформы.When you publish a self-contained deployment (SCD), the .NET Core SDK creates a platform-specific executable. Публикация SCD включает в себя все необходимые файлы .NET Core для запуска приложения, но не включает машинные зависимости .NET Core.Publishing an SCD includes all required .NET Core files to run your app but it doesn't include the native dependencies of .NET Core. Эти зависимости должны присутствовать в системе перед запуском приложения.These dependencies must be present on the system before the app runs.

При публикации SCD создается приложение, которое не будет автоматически использовать новейшую версию исправлений безопасности .NET Core.Publishing an SCD creates an app that doesn't roll-forward to the latest available .NET Core security patch. Дополнительные сведения о привязке версий во время компиляции см. в разделе Выбор используемой версии .NET Core.For more information on version binding at compile time, see Select the .NET Core version to use.

Необходимо использовать следующие параметры командной строки с командой dotnet publish для публикации SCD:You must use the following switches with the dotnet publish command to publish an SCD:

  • -r <RID> — этот параметр использует идентификатор (RID) для указания целевой платформы.-r <RID> This switch uses an identifier (RID) to specify the target platform. Список идентификаторов сред выполнения см. в каталоге идентификаторов сред выполнения.For a list of runtime identifiers, see Runtime Identifier (RID) catalog.

  • --self-contained true — этот параметр указывает пакету SDK для .NET Core, что исполняемый файл нужно создать как SCD.--self-contained true This switch tells the .NET Core SDK to create an executable as an SCD.

Примечание

Можно уменьшить размер развертывания, включив инвариантный режим глобализации.You can reduce the total size of your deployment by enabling globalization invariant mode. Он подходит для приложений, которые не имеют глобальных параметров и могут использовать соглашения о форматировании, соглашения о регистре, сравнение строк и порядок сортировки для инвариантного языка и региональных параметров.This mode is useful for applications that are not globally aware and that can use the formatting conventions, casing conventions, and string comparison and sort order of the invariant culture. Дополнительные сведения об инвариантном режиме глобализации и том, как его включить, см. в статье об инвариантном режиме глобализации .NET Core.For more information about globalization invariant mode and how to enable it, see .NET Core Globalization Invariant Mode.

См. такжеSee also