Общие сведения о публикации приложений .NET Core.NET Core application publishing overview

Приложения, создаваемые с помощью .NET Core, могут быть опубликованы в двух разных режимах, и режим влияет на то, как пользователь запускает приложение.Applications you create with .NET Core can be published in two different modes, and the mode affects how a user runs your app.

При публикации автономного приложения создается приложение, которое включает среду выполнения и библиотеки .NET Core, а также приложение и его зависимости.Publishing your app as self-contained produces an application that includes the .NET Core runtime and libraries, and your application and its dependencies. Пользователи приложения могут запустить его на компьютере, на котором не установлена среда выполнения .NET Core.Users of the application can run it on a machine that doesn't have the .NET Core runtime installed.

При публикации приложения в качестве зависимого от среды создается приложение, которое включает только само приложение и его зависимости.Publishing your app as framework-dependent produces an application that includes only your application itself and its dependencies. Пользователям приложения необходимо отдельно установить среду выполнения .NET Core.Users of the application have to separately install the .NET Core runtime.

Оба режима публикации по умолчанию создают исполняемый файл, зависящий от платформы.Both publishing modes produce a platform-specific executable by default. Приложения, зависящие от среды, могут создаваться без исполняемого файла, и эти приложения являются кросс-платформенными.Framework-dependent applications can be created without an executable, and these applications are cross-platform.

При создании исполняемого файла можно указать целевую платформу с идентификатором среды выполнения (RID).When an executable is produced, you can specify the target platform with a runtime identifier (RID). Дополнительные сведения об идентификаторах среды выполнения см. в каталоге RID для .NET Core.For more information about RIDs, see .NET Core RID Catalog.

В следующей таблице приведены команды, используемые для публикации автономных и зависящих от среды для каждой версии пакета SDK:The following table outlines the commands used to publish an app as framework-dependent or self-contained, per SDK version:

TypeType SDK 2.1SDK 2.1 SDK 3.xSDK 3.x КомандаCommand
зависящий от среды исполняемый файл для текущей платформы.framework-dependent executable for the current platform. ✔️✔️ dotnet publish
зависящий от среды исполняемый файл для определенной платформы.framework-dependent executable for a specific platform. ✔️✔️ dotnet publish -r <RID> --self-contained false
зависящий от среды кросс-платформенный двоичный файл.framework-dependent cross-platform binary. ✔️✔️ ✔️✔️ dotnet publish
автономный исполняемый файл.self-contained executable. ✔️✔️ ✔️✔️ dotnet publish -r <RID>

Дополнительные сведения см. в разделе Команда .NET Core dotnet publish.For more information, see .NET Core dotnet publish command.

Создание исполняемого файлаProduce an executable

Исполняемые файлы не являются кроссплатформенными.Executables aren't cross-platform. Они относятся к операционной системе и архитектуре ЦП.They're specific to an operating system and CPU architecture. При публикации приложения и создании исполняемого файла можно опубликовать приложение как автономное или зависящее от среды.When publishing your app and creating an executable, you can publish the app as self-contained or framework-dependent. Публикация автономного приложения включает среду выполнения .NET Core, и пользователям приложения не нужно беспокоиться об установке .NET Core перед запуском приложения.Publishing an app as self-contained includes the .NET Core runtime with the app, and users of the app don't have to worry about installing .NET Core before running the app. Приложения, опубликованные как зависимые от среды, не включают в себя среду выполнения и библиотеки .NET Core; в пакет входят только зависимости от приложений и сторонних производителей.Apps published as framework-dependent don't include the .NET Core runtime and libraries; only the app and 3rd-party dependencies are included.

Следующие команды создают исполняемый файл:The following commands produce an executable:

TypeType SDK 2.1SDK 2.1 SDK 3.xSDK 3.x КомандаCommand
зависящий от среды исполняемый файл для текущей платформы.framework-dependent executable for the current platform. ✔️✔️ dotnet publish
зависящий от среды исполняемый файл для определенной платформы.framework-dependent executable for a specific platform. ✔️✔️ dotnet publish -r <RID> --self-contained false
автономный исполняемый файл.self-contained executable. ✔️✔️ ✔️✔️ dotnet publish -r <RID>

Создание кроссплатформенного двоичного файлаProduce a cross-platform binary

Кросс-платформенные двоичные файлы создаются при публикации приложения, зависящего от среды, в виде файла DLL.Cross-platform binaries are created when you publish your app as framework-dependent, in the form of a dll file. Файл DLL называется по имени вашего проекта.The dll file is named after your project. Например, если ваше приложение называется word_reader, создается файл с именем word_reader.dll.For example, if you have an app named word_reader, a file named word_reader.dll is created. Приложения, опубликованные таким образом, выполняются с помощью команды dotnet <filename.dll> на любой платформе.Apps published in this way are run with the dotnet <filename.dll> command and can be run on any platform.

Кроссплатформенные двоичные файлы могут выполняться в любой операционной системе, если целевая среда выполнения .NET Core уже установлена.Cross-platform binaries can be run on any operating system as long as the targeted .NET Core runtime is already installed. Если целевая среда выполнения .NET Core не установлена, приложение может работать с помощью более новой среды выполнения, если оно настроено соответствующим образом.If the targeted .NET Core runtime isn't installed, the app may run using a newer runtime if the app is configured to roll-forward. Дополнительные сведения см. в разделе Накат зависящих от среды приложений.For more information, see framework-dependent apps roll forward.

Следующая команда создает кроссплатформенный двоичный файл:The following command produces a cross-platform binary:

TypeType SDK 2.1SDK 2.1 SDK 3.xSDK 3.x КомандаCommand
зависящий от среды кросс-платформенный двоичный файл.framework-dependent cross-platform binary. ✔️✔️ ✔️✔️ dotnet publish

Публикация зависящих от среды приложенийPublish framework-dependent

Приложения, опубликованные как зависящие от среды, являются кросс-платформенными и не включают среду выполнения .NET Core.Apps published as framework-dependent are cross-platform and don't include the .NET Core runtime. Пользователь приложения должен установить среду выполнения .NET Core.The user of your app is required to install the .NET Core runtime.

При публикации приложения, зависящего от среды, создается кросс-платформенный двоичный файл с расширением DLL и исполняемый файл, зависящий от платформы, предназначенный для текущей платформы.Publishing an app as framework-dependent produces a cross-platform binary as a dll file, and a platform-specific executable that targets your current platform. Файл DLL является кроссплатформенным, а исполняемый файл — нет.The dll is cross-platform while the executable isn't. Например, при публикации приложения с именем word_reader для Windows создается исполняемый файл word_reader.exe и файл word_reader.dll.For example, if you publish an app named word_reader and target Windows, a word_reader.exe executable is created along with word_reader.dll. Для Linux или macOS создается исполняемый файл word_reader, а также word_reader.dll.When targeting Linux or macOS, a word_reader executable is created along with word_reader.dll. Дополнительные сведения об идентификаторах среды выполнения см. в каталоге RID для .NET Core.For more information about RIDs, see .NET Core RID Catalog.

Важно!

Пакет SDK для .NET Core 2.1 не создает исполняемые файлы, зависящие от платформы, при публикации приложения, зависящего от среды..NET Core SDK 2.1 doesn't produce platform-specific executables when you publish an app framework-dependent.

Кроссплатформенный двоичный файл приложения можно запустить с помощью команды dotnet <filename.dll> и выполнять на любой платформе.The cross-platform binary of your app can be run with the dotnet <filename.dll> command, and can be run on any platform. Если приложение использует пакет NuGet с реализациями, зависящими от платформы, все зависимости платформ копируются в папку публикации вместе с приложением.If the app uses a NuGet package that has platform-specific implementations, all platforms' dependencies are copied to the publish folder along with the app.

Вы можете создать исполняемый файл для конкретной платформы, передав параметры -r <RID> --self-contained false в команде dotnet publish.You can create an executable for a specific platform by passing the -r <RID> --self-contained false parameters to the dotnet publish command. Если параметр -r опущен, для текущей платформы создается исполняемый файл.When the -r parameter is omitted, an executable is created for your current platform. Все пакеты NuGet, имеющие зависящие от платформы зависимости для целевой платформы, копируются в папку публикации.Any NuGet packages that have platform-specific dependencies for the targeted platform are copied to the publish folder.

ПреимуществаAdvantages

  • Небольшое развертываниеSmall deployment
    Распределяются только приложение и его зависимости.Only your app and its dependencies are distributed. Среда выполнения и библиотеки .NET Core устанавливаются пользователем, и все приложения совместно используют среду выполнения.The .NET Core runtime and libraries are installed by the user and all apps share the runtime.

  • Кроссплатформенные приложенияCross-platform
    Ваше приложение и библиотеки на основе .NET работают в других операционных системах.Your app and any .NET-based library runs on other operating systems. Для приложения не нужно определять целевую платформу.You don't need to define a target platform for your app. Дополнительные сведения о формате файлов .NET см. в разделе Формат файла сборки .NET.For information about the .NET file format, see .NET Assembly File Format.

  • Использует последнюю исправленную версию среды выполненияUses the latest patched runtime
    Приложение использует самую новую среду выполнения (в рамках целевого основного и дополнительного семейства .NET Core), установленную в целевой системе.The app uses the latest runtime (within the targeted major-minor family of .NET Core) installed on the target system. Это означает, что приложение будет автоматически использовать последнюю исправленную версию среды выполнения .NET Core.This means your app automatically uses the latest patched version of the .NET Core runtime. Поведение по умолчанию можно переопределить.This default behavior can be overridden. Дополнительные сведения см. в разделе Накат зависящих от среды приложений.For more information, see framework-dependent apps roll forward.

НедостаткиDisadvantages

  • Требует предварительной установки среды выполненияRequires pre-installing the runtime
    Приложение может выполняться, только если в системе уже установлена целевая версия .NET Core.Your app can run only if the version of .NET Core your app targets is already installed on the host system. Вы можете настроить поведение наката для приложения, чтобы либо требовать определенную версию .NET Core, либо разрешить более новую версию .NET Core.You can configure roll-forward behavior for the app to either require a specific version of .NET Core or allow a newer version of .NET Core. Дополнительные сведения см. в разделе Накат зависящих от среды приложений.For more information, see framework-dependent apps roll forward.

  • Платформа .NET Core может измениться.NET Core may change
    Среду выполнения и библиотеки .NET Core можно обновлять на компьютере, где выполняется приложение.It's possible for the .NET Core runtime and libraries to be updated on the machine where the app is run. В редких случаях это может изменить поведение приложения, если вы используете библиотеки .NET Core, как большинство приложений.In rare cases, this may change the behavior of your app if you use the .NET Core libraries, which most apps do. Вы можете настроить, как приложение использует более новые версии .NET Core.You can configure how your app uses newer versions of .NET Core. Дополнительные сведения см. в разделе Накат зависящих от среды приложений.For more information, see framework-dependent apps roll forward.

Приведенные ниже недостатки применимы только к пакету SDK для .NET Core 2.1.The following disadvantage only applies to .NET Core 2.1 SDK.

  • Используйте команду dotnet, чтобы запустить приложениеUse the dotnet command to start the app
    Для запуска приложения пользователи должны выполнить команду dotnet <filename.dll>.Users must run the dotnet <filename.dll> command to start your app. Пакет SDK для .NET Core 2.1 не создает исполняемые файлы, зависящие от платформы, при публикации приложения, зависящего от среды..NET Core 2.1 SDK doesn't produce platform-specific executables for apps published framework-dependent.

ПримерыExamples

Публикация кросс-платформенного приложения, зависящего от среды.Publish an app cross-platform framework-dependent. Исполняемый файл, предназначенный для текущей платформы, создается вместе с DLL-файлом.An executable that targets your current platform is created along with the dll file.

dotnet publish

Публикация кросс-платформенного приложения, зависящего от среды.Publish an app cross-platform framework-dependent. Вместе с DLL-файлом создается 64-разрядный исполняемый файл Linux.A Linux 64-bit executable is created along with the dll file. Эта команда не работает с пакетом SDK для .NET Core 2.1.This command doesn't work with .NET Core SDK 2.1.

dotnet publish -r linux-x64 --self-contained false

Публикация автономных приложенийPublish self-contained

При публикации автономного приложения создается исполняемый файл, зависящий от платформы.Publishing your app as self-contained produces a platform-specific executable. Выходная папка публикации содержит все компоненты приложения, включая библиотеки .NET Core и целевую среду выполнения.The output publishing folder contains all components of the app, including the .NET Core libraries and target runtime. Приложение изолировано от других приложений .NET Core и не использует локально установленную общую среду выполнения.The app is isolated from other .NET Core apps and doesn't use a locally installed shared runtime. Пользователю приложения не требуется загружать и устанавливать .NET Core.The user of your app isn't required to download and install .NET Core.

Исполняемый двоичный файл создается для указанной целевой платформы.The executable binary is produced for the specified target platform. Например, если у вас есть приложение с именем word_reader и вы публикуете автономный исполняемый файл для Windows, создается файл word_reader.exe.For example, if you have an app named word_reader, and you publish a self-contained executable for Windows, a word_reader.exe file is created. При публикации для Linux или macOS создается файл word_reader.Publishing for Linux or macOS, a word_reader file is created. Целевая платформа и архитектура указываются с помощью параметра -r <RID> для команды dotnet publish.The target platform and architecture is specified with the -r <RID> parameter for the dotnet publish command. Дополнительные сведения об идентификаторах среды выполнения см. в каталоге RID для .NET Core.For more information about RIDs, see .NET Core RID Catalog.

Если приложение имеет зависимости для определенной платформы, например пакет NuGet, содержащий зависимости для определенной платформы, они копируются в папку публикации вместе с приложением.If the app has platform-specific dependencies, such as a NuGet package containing platform-specific dependencies, these are copied to the publish folder along with the app.

ПреимуществаAdvantages

  • Управление версией .NET CoreControl .NET Core version
    Вы управляете, какая версия .NET Core развертывается вместе с приложением.You control which version of .NET Core is deployed with your app.

  • Нацеливание на конкретные платформыPlatform-specific targeting
    Поскольку необходимо опубликовать приложение для каждой платформы, вы знаете, где будет выполняться приложение.Because you have to publish your app for each platform, you know where your app will run. Если в .NET Core появляется новая платформа, пользователи не смогут запустить приложение на этой платформе до выпуска версии, предназначенной для этой платформы.If .NET Core introduces a new platform, users can't run your app on that platform until you release a version targeting that platform. Вы можете протестировать приложение на наличие проблем совместимости перед тем, как пользователи запустят приложение на новой платформе.You can test your app for compatibility problems before your users run your app on the new platform.

НедостаткиDisadvantages

  • Более крупные развертыванияLarger deployments
    Так как приложение включает среду выполнения .NET Core и все зависимости приложения, размер скачиваемого файла и требуемого пространства на жестком диске больше, чем для версии, зависящей от среды.Because your app includes the .NET Core runtime and all of your app dependencies, the download size and hard drive space required is greater than a framework-dependent version.

    Совет

    Вы можете уменьшить размер развертывания в системах Linux примерно на 28 МБ с помощью инвариантного режима глобализации в .NET Core.You can reduce the size of your deployment on Linux systems by approximately 28 MB by using .NET Core globalization invariant mode. С его помощью приложение будет обрабатывать все языки и региональные параметры как инвариантные языки и региональные параметры.This forces your app to treat all cultures like the invariant culture.

    Совет

    Существует предварительная версия функция усечения позволяющая еще больше уменьшить размер развертывания.There is a preview Trim feature that can further reduce the size of your deployment.

  • Усложненное обновление версии .NET CoreHarder to update the .NET Core version
    Среду выполнения .NET Core (распространяемую с вашим приложением) можно обновить только путем выпуска новой версии приложения..NET Core Runtime (distributed with your app) can only be upgraded by releasing a new version of your app. Однако при необходимости.NET Core обновит критически важные обновления системы безопасности для библиотеки платформы на компьютере, на котором выполняется приложение.However, .NET Core will update critical security patches as needed for the framework library in the machine that your app runs on. Ответственность за полную проверку этого сценария обновления системы безопасности лежит на вас.You are responsible for end to end validation for this security patch scenario.

ПримерыExamples

Публикация автономного приложения.Publish an app self-contained. Создается 64-разрядный исполняемый файл macOS.A macOS 64-bit executable is created.

dotnet publish -r osx-x64

Публикация автономного приложения.Publish an app self-contained. Создается 64-разрядный исполняемый файл Windows.A Windows 64-bit executable is created.

dotnet publish -r win-x64

См. такжеSee also