Публикация приложений .NET с помощью интерфейса командной строки

В этой статье показано, как опубликовать приложение .NET из командной строки. .NET предоставляет три способа публикации приложений. Зависимое от платформы развертывание создает кроссплатформенный DLL-файл, который использует локально установленную среду выполнения .NET. Зависимый от платформы исполняемый файл использует локально установленную среду выполнения .NET. Автономный исполняемый файл создает зависимый от платформы исполняемый файл и включает локальную копию среды выполнения .NET.

Общие сведения о режимах развертывания см. в статье Общие сведения о публикации приложений .NET.

Ищете справку по работе с командной строкой? В следующей таблице показаны некоторые примеры публикации приложений. Вы можете указать целевую платформу с помощью параметра -f <TFM> или путем редактирования файла проекта. Дополнительные сведения см. в статье Основы публикации.

Режим публикации Версия пакета SDK Get-Help
развертывание, зависящее от платформы; 2.1 dotnet publish -c Release
3.1 dotnet publish -c Release -p:UseAppHost=false
5,0 dotnet publish -c Release -p:UseAppHost=false
Исполняемый файл, зависящий от платформы 3.1 dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release
5,0 dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release
автономное развертывание; 2.1 dotnet publish -c Release -r <RID> --self-contained true
3.1 dotnet publish -c Release -r <RID> --self-contained true
5,0 dotnet publish -c Release -r <RID> --self-contained true

* При использовании пакета SDK 3.1 или более поздней версии режим публикации по умолчанию при выполнении базовой команды dotnet publish предусматривает использование зависимого от платформы исполняемого файла.

Примечание

Параметр -c Release не является обязательным. Он предоставляется в виде напоминания о публикации сборки выпуска приложения.

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

Параметр <TargetFramework> файла проекта указывает целевую платформу по умолчанию при публикации приложения. Можно изменить целевую платформу на любой допустимый моникер целевой платформы (TFM). Например, если проект использует <TargetFramework>netcoreapp2.1</TargetFramework>, создается двоичный файл, предназначенный для .NET Core 2.1. TFM, указанный в этом параметре, является целевым объектом по умолчанию, используемым командой dotnet publish.

Если вам нужно охватить несколько платформ, можно задать в параметре <TargetFrameworks> несколько значений TFM, разделенных точками с запятой. При создании приложения создается сборка для каждой целевой платформы. Но при публикации приложения необходимо указать целевую платформу с помощью команды dotnet publish -f <TFM>.

Если не указано иное, выходной каталог команды dotnet publish — ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/. Значение по умолчанию для режима BUILD-CONFIGURATIONОтладка, если с помощью параметра -c не задано иное. Например dotnet publish -c Release -f netcoreapp2.1 публикует в ./bin/Release/netcoreapp2.1/publish/.

При использовании пакета SDK для .NET Core 3.1 или более поздней версии режим публикации по умолчанию предусматривает зависимый от платформы исполняемый файл.

При использовании пакета SDK для .NET Core 2.1 режим публикации по умолчанию предусматривает зависимое от платформы развертывание.

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

Если приложение имеет машинные зависимости, оно не может выполняться в другой операционной системе. Например, если приложение использует нативный интерфейс Windows API, оно не будет работать в macOS или Linux. Необходимо написать код для конкретной платформы и скомпилировать исполняемый файл для каждой платформы.

Учтите также, что если ссылка на библиотеку имеет машинную зависимость, приложения могут не выполняться на всех платформах. Тем не менее возможно, что пакет NuGet, на который вы ссылаетесь, включает версии для конкретных платформ, которые разрешают машинные зависимости за вас.

При распространении приложения с машинными зависимостями может потребоваться использовать dotnet publish -r <RID> для указания целевой платформы публикации. Список идентификаторов сред выполнения см. в каталоге идентификаторов сред выполнения.

Дополнительные сведения о двоичных файлах для определенной платформы см. в разделах Исполняемый файл, зависящий от платформы и Автономное развертывание.

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

Чтобы изучить команды публикации, можно использовать следующее приложение. Приложение можно создать, выполнив следующие команды в окне терминала:

mkdir apptest1
cd apptest1
dotnet new console
dotnet add package Figgle

Файл Program.cs или Program.vb, созданный с помощью шаблона консоли, необходимо изменить на следующее:

using System;

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

При выполнении приложения (dotnet run) отображается следующий результат:

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

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

Для пакета SDK для .NET Core 2.1 зависимое от платформы развертывание (FDD) является режимом по умолчанию для базовой команды dotnet publish. В более новых пакетах SDK по умолчанию используется зависимый от платформы исполняемый файл.

При публикации приложения в качестве FDD файл <PROJECT-NAME>.dll создается в папке ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/. Чтобы запустить приложение, перейдите к папке выходных данных и используйте команду dotnet <PROJECT-NAME>.dll.

Ваше приложение будет настроено для конкретной версии .NET. Целевую среду выполнения .NET необходимо установить на компьютер, на котором будет запущено приложение. Например, если приложение предназначено для .NET Core 3.1, на любом компьютере, где работает ваше приложение, должна быть установлена среда выполнения .NET Core 3.1. Как уже говорилось в разделе Основы публикации, можно изменить файл проекта для изменения целевой платформы по умолчанию или для выбора нескольких платформ.

При публикации FDD создается приложение, которое автоматически использует новейшую версию исправлений безопасности .NET, доступных в системе, где выполняется приложение. Дополнительные сведения о привязке версий во время компиляции см. в разделе Накат платформозависимых приложений.

Режим публикации Версия пакета SDK Get-Help
развертывание, зависящее от платформы; 2.1 dotnet publish -c Release
3.1 dotnet publish -c Release -p:UseAppHost=false
5,0 dotnet publish -c Release -p:UseAppHost=false

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

Для CLI пакета SDK .NET 5 (и .NET Core 3.1) зависящий от платформы исполняемый файл (FDE) является режимом по умолчанию для базовой команды dotnet publish. Указывать другие параметры, если вы будете работать в текущей операционной системе, не нужно.

В этом режиме для размещения кроссплатформенного приложения создается исполняемый файл основного приложения для конкретной платформы. Этот режим аналогичен FDD, так как FDD требуется основное приложение в виде команды dotnet. Имя исполняемого файла основного приложения зависит от платформы и обычно похоже на <PROJECT-FILE>.exe. Вы можете запустить этот исполняемый файл напрямую вместо вызова метода dotnet <PROJECT-FILE>.dll, который по-прежнему допустим для запуска приложения.

Ваше приложение будет настроено для конкретной версии .NET. Целевую среду выполнения .NET необходимо установить на компьютер, на котором будет запущено приложение. Например, если приложение предназначено для .NET Core 3.1, на любом компьютере, где работает ваше приложение, должна быть установлена среда выполнения .NET Core 3.1. Как уже говорилось в разделе Основы публикации, можно изменить файл проекта для изменения целевой платформы по умолчанию или для выбора нескольких платформ.

Публикация FDE создает приложение, которое автоматически использует новейшую версию исправлений безопасности .NET, доступных в системе, где выполняется приложение. Дополнительные сведения о привязке версий во время компиляции см. в разделе Накат платформозависимых приложений.

При использовании .NET 2.1 необходимо использовать следующие параметры с командой dotnet publish для публикации FDE:

  • -r <RID> — этот параметр использует идентификатор (RID) для указания целевой платформы. Список идентификаторов сред выполнения см. в каталоге идентификаторов сред выполнения.

  • --self-contained false — этот параметр отключает поведение переключателя по умолчанию -r, которое заключается в создании автономного развертывания. Этот параметр создает FDE.

Режим публикации Версия пакета SDK Get-Help
Исполняемый файл, зависящий от платформы 3.1 dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release
5,0 dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release

При использовании параметра -r путь к папке выходных данных изменяется на ./bin/<BUILD-CONFIGURATION>/<TFM>/<RID>/publish/

Если вы используете пример приложения, запустите dotnet publish -f net5.0 -r win10-x64 --self-contained false. Эта команда создает следующий исполняемый файл: ./bin/Debug/net5.0/win10-x64/publish/apptest1.exe

Примечание

Можно уменьшить размер развертывания, включив инвариантный режим глобализации. Он подходит для приложений, которые не имеют глобальных параметров и могут использовать соглашения о форматировании, соглашения о регистре, сравнение строк и порядок сортировки для инвариантного языка и региональных параметров. Дополнительные сведения об инвариантном режиме глобализации и том, как его включить, см. в статье об инвариантном режиме глобализации .NET.

автономное развертывание;

При публикации автономного развертывания (SCD) пакет SDK для .NET создает исполняемый файл для конкретной платформы. Публикация SCD включает в себя все необходимые файлы .NET для запуска приложения, но не включает собственные зависимости .NET. Эти зависимости должны присутствовать в системе перед запуском приложения.

При публикации SCD создается приложение, которое не будет автоматически использовать новейшую версию исправлений безопасности .NET. Дополнительные сведения о привязке версий во время компиляции см. в разделе Накат платформозависимых приложений.

Необходимо использовать следующие параметры командной строки с командой dotnet publish для публикации SCD:

  • -r <RID> — этот параметр использует идентификатор (RID) для указания целевой платформы. Список идентификаторов сред выполнения см. в каталоге идентификаторов сред выполнения.

  • --self-contained true — этот параметр указывает пакету SDK для .NET, что исполняемый файл должен иметь формат SCD.

Режим публикации Версия пакета SDK Get-Help
автономное развертывание; 2.1 dotnet publish -c Release -r <RID> --self-contained true
3.1 dotnet publish -c Release -r <RID> --self-contained true
5,0 dotnet publish -c Release -r <RID> --self-contained true

Примечание

Можно уменьшить размер развертывания, включив инвариантный режим глобализации. Он подходит для приложений, которые не имеют глобальных параметров и могут использовать соглашения о форматировании, соглашения о регистре, сравнение строк и порядок сортировки для инвариантного языка и региональных параметров. Дополнительные сведения об инвариантном режиме глобализации и том, как его включить, см. в статье об инвариантном режиме глобализации .NET Core.

См. также раздел