Развертывание приложений .NET Core.NET Core application deployment

Для приложений .NET Core можно создавать два типа развертываний:You can create three types of deployments for .NET Core applications:

  • Развертывание, зависящее от платформы.Framework-dependent deployment. Как понятно из названия, зависящее от платформы развертывание (FDD) требует наличия в целевой системе общей для всей системы версии .NET Core.As the name implies, framework-dependent deployment (FDD) relies on the presence of a shared system-wide version of .NET Core on the target system. Так как платформа .NET Core уже имеется, приложение можно переносить между установками .NET Core.Because .NET Core is already present, your app is also portable between installations of .NET Core. Приложение содержит только собственный код и зависимости сторонних разработчиков, которые не входят в библиотеки .NET Core.Your app contains only its own code and any third-party dependencies that are outside of the .NET Core libraries. Зависящие от платформы развертывания содержат DLL-файлы, которые можно запускать с помощью служебной программы dotnet из командной строки.FDDs contain .dll files that can be launched by using the dotnet utility from the command line. Например, команда dotnet app.dll запускает приложение с именем app.For example, dotnet app.dll runs an application named app.

  • Автономные развертывания.Self-contained deployment. В отличие от зависящих от платформы развертываний автономное развертывание (SCD) не требует наличия в целевой системе каких-либо общих компонентов.Unlike FDD, a self-contained deployment (SCD) doesn't rely on the presence of shared components on the target system. Все компоненты, включая библиотеки .NET Core и среду выполнения .NET Core, включены в приложение и изолированы от других приложений .NET Core.All components, including both the .NET Core libraries and the .NET Core runtime, are included with the application and are isolated from other .NET Core applications. Автономные развертывания включают исполняемый файл (например, app.exe на платформах Windows для приложения с именем app), который является переименованной версией связанного с платформой узла .NET Core, и DLL-файл (например app.dll), представляющий само приложение.SCDs include an executable (such as app.exe on Windows platforms for an application named app), which is a renamed version of the platform-specific .NET Core host, and a .dll file (such as app.dll), which is the actual application.

  • Исполняемые файлы, связанные с платформой.Framework-dependent executables. Создает исполняемый файл, который выполняется на целевой платформе.Produces an executable that runs on a target platform. Как и в случае зависящих от платформы развертываний, зависящие от платформы исполняемые файлы связаны с платформой и не являются автономными.Similar to FDDs, framework-dependent executables (FDE) are platform-specific and aren't self-contained. Эти развертывания зависят от наличия в целевой системе общей для всей системы версии .NET Core.These deployments still rely on the presence of a shared system-wide version of .NET Core to run. В отличие от автономных развертываний приложение содержит только собственный код и сторонние зависимости, которые не входят в библиотеки .NET Core.Unlike an SCD, your app only contains your code and any third-party dependencies that are outside of the .NET Core libraries. Зависящие от платформы исполняемые файлы создают исполняемый файл, который выполняется на целевой платформе.FDEs produce an executable that runs on the target platform.

Развертывания, зависящие от платформыFramework-dependent deployments (FDD)

При развертывании, зависящем от платформы, вы развертываете только свое приложение и сторонние зависимости.For an FDD, you deploy only your app and third-party dependencies. Приложение будет использовать версию .NET Core, доступную в целевой системе.Your app will use the version of .NET Core that's present on the target system. Это стандартная модель развертывания для приложений .NET Core и ASP.NET Core, использующих .NET Core.This is the default deployment model for .NET Core and ASP.NET Core apps that target .NET Core.

Зачем использовать развертывание, зависящее от платформыWhy create a framework-dependent deployment?

Развертывание, зависящее от платформы, имеет ряд преимуществ.Deploying an FDD has a number of advantages:

  • Вам не нужно предварительно определять целевые операционные системы, в которых будет выполняться приложение .NET Core.You don't have to define the target operating systems that your .NET Core app will run on in advance. Так как .NET Core использует общий формат файлов PE для исполняемых файлов и библиотек вне зависимости от операционной системы, ваше приложение может выполняться вне зависимости от базовой операционной системы.Because .NET Core uses a common PE file format for executables and libraries regardless of operating system, .NET Core can execute your app regardless of the underlying operating system. Дополнительные сведения о формате файлов PE см. в разделе Формат файла сборки .NET.For more information on the PE file format, see .NET Assembly File Format.

  • Пакет развертывания имеет небольшой размер.The size of your deployment package is small. Нужно развернуть только приложение и его зависимости, но не саму платформу .NET Core.You only deploy your app and its dependencies, not .NET Core itself.

  • Если переопределение не выполнено, зависящие от платформы развертывания будут использовать последнюю версию обслуживаемой среды выполнения, установленной в целевой системе.Unless overridden, FDDs will use the latest serviced runtime installed on the target system. Так приложение сможет использовать последнюю исправленную версию среды выполнения .NET Core.This allows your application to use the latest patched version of the .NET Core runtime.

  • Несколько приложений используют одну и ту же установку .NET Core, что сокращает использование дискового пространства и памяти в системе.Multiple apps use the same .NET Core installation, which reduces both disk space and memory usage on host systems.

Имеется и ряд недостатков.There are also a few disadvantages:

  • Приложение может выполняться, только если в системе уже установлена целевая или более поздняя версия .NET Core.Your app can run only if the version of .NET Core your app targets, or a later version, is already installed on the host system.

  • Среда выполнения и библиотеки .NET Core могут изменяться в будущих выпусках, о чем вы можете не знать.It's possible for the .NET Core runtime and libraries to change without your knowledge in future releases. В редких случаях это может повлиять на работу вашего приложения.In rare cases, this may change the behavior of your app.

Автономные развертыванияSelf-contained deployments (SCD)

В случае с автономным развертыванием приложение и зависимости сторонних разработчиков развертываются вместе с версией .NET Core, с помощью которой создавалось приложение.For a self-contained deployment, you deploy your app and any required third-party dependencies along with the version of .NET Core that you used to build the app. Процесс создания автономного развертывания не включает собственные зависимости .NET Core для различных платформ, поэтому их нужно установить перед запуском приложения.Creating an SCD doesn't include the native dependencies of .NET Core on various platforms, so these must be present before the app runs. См. дополнительные сведения о привязке версий в среде выполнения .NET Core.For more information on version binding at runtime, see the article on version binding in .NET Core.

Начиная с версии пакета SDK 2.1 (2.1.300) для NET Core, платформа .NET Core поддерживает накат версии исправления.Starting with NET Core 2.1 SDK (version 2.1.300), .NET Core supports patch version roll forward. При создании автономного развертывания средства .NET Core автоматически реализуют последнюю обслуживаемую версию среды выполнения .NET Core, для которой предназначено приложение.When you create a self-contained deployment, .NET Core tools automatically include the latest serviced runtime of the .NET Core version that your application targets. (Последняя обслуживаемая версия среды выполнения включает исправления безопасности и другие исправления ошибок.) Обслуживаемая среда выполнения не обязательно должна присутствовать в системе сборки. Она автоматически скачивается на сайте NuGet.org. Дополнительные сведения о том, как отказаться от наката версии исправления, включая инструкции, см. в статье Обновление версии среды выполнения автономного развертывания.(The latest serviced runtime includes security patches and other bug fixes.) The serviced runtime does not have to be present on your build system; it is downloaded automatically from NuGet.org. For more information, including instructions on how to opt out of patch version roll forward, see Self-contained deployment runtime roll forward.

Для автономного и зависимого от платформы развертываний создаются разные исполняемые файлы. Поэтому вы можете подписать исполняемый файл, созданный для автономного развертывания, своей подписью издателя.FDD and SCD deployments use separate host executables, so you can sign a host executable for an SCD with your publisher signature.

Зачем использовать автономное развертываниеWhy deploy a self-contained deployment?

Автономное развертывание имеет два основных преимущества.Deploying a Self-contained deployment has two major advantages:

  • Вы единолично контролируете версию .NET Core, которая развертывается вместе с приложением.You have sole control of the version of .NET Core that is deployed with your app. Платформа .NET Core может предоставляться только вами..NET Core can be serviced only by you.

  • Вы можете быть уверены в том, что приложение .NET Core может выполняться в целевой системе, так как вы предоставили соответствующую версию .NET Core.You can be assured that the target system can run your .NET Core app, since you're providing the version of .NET Core that it will run on.

Есть также ряд недостатков.It also has a number of disadvantages:

  • Так как платформа .NET Core включается в пакет развертывания, необходимо заранее выбрать целевые платформы, для которых вы создаете пакеты развертывания.Because .NET Core is included in your deployment package, you must select the target platforms for which you build deployment packages in advance.

  • Пакет развертывания имеет относительно большой размер, так как в него необходимо включить платформу .NET Core в дополнение к приложению и зависимостям сторонних разработчиков.The size of your deployment package is relatively large, since you have to include .NET Core as well as your app and its third-party dependencies.

    Начиная с версии .NET Core 2.0 можно уменьшить размер развертывания в системах Linux примерно на 28 МБ с помощью инвариантного режима глобализации в .NET Core.Starting with .NET Core 2.0, you can reduce the size of your deployment on Linux systems by approximately 28 MB by using .NET Core globalization invariant mode. Как правило, .NET Core использует в Linux библиотеки ICU для поддержки глобализации.Ordinarily, .NET Core on Linux relies on the ICU libraries for globalization support. В инвариантном режиме библиотеки не включаются в развертывание и все языки и региональные параметры используются как инвариантные.In invariant mode, the libraries are not included with your deployment, and all cultures behave like the invariant culture.

  • При развертывании множества автономных приложений .NET Core в системе может использоваться значительный объем дискового пространства, так как каждое приложение создает копии файлов .NET Core.Deploying numerous self-contained .NET Core apps to a system can consume significant amounts of disk space, since each app duplicates .NET Core files.

Зависящие от платформы исполняемые файлыFramework-dependent executables (FDE)

Начиная с версии .NET Core 2.2, можно развернуть приложение как зависящий от платформы исполняемый файл, используя любые сторонние зависимости.Starting with .NET Core 2.2, you can deploy your app as an FDE, along with any required third-party dependencies. Приложение будет использовать версию .NET Core, установленную в целевой системе.Your app will use the version of .NET Core that's installed on the target system.

Преимущества зависящих от платформы развертыванийWhy deploy a framework-dependent executable?

Зависящие от платформы развертывания имеют ряд преимуществ:Deploying an FDE has a number of advantages:

  • Пакет развертывания имеет небольшой размер.The size of your deployment package is small. Нужно развернуть только приложение и его зависимости, но не саму платформу .NET Core.You only deploy your app and its dependencies, not .NET Core itself.

  • Несколько приложений используют одну и ту же установку .NET Core, что сокращает использование дискового пространства и памяти в системе.Multiple apps use the same .NET Core installation, which reduces both disk space and memory usage on host systems.

  • Приложение может выполняться путем вызова опубликованного исполняемого файла без прямого вызова служебной программы dotnet.Your app can be run by calling the published executable without invoking the dotnet utility directly.

Имеется и ряд недостатков.There are also a few disadvantages:

  • Приложение может выполняться, только если в системе уже установлена целевая или более поздняя версия .NET Core.Your app can run only if the version of .NET Core your app targets, or a later version, is already installed on the host system.

  • Среда выполнения и библиотеки .NET Core могут изменяться в будущих выпусках, о чем вы можете не знать.It's possible for the .NET Core runtime and libraries to change without your knowledge in future releases. В редких случаях это может повлиять на работу вашего приложения.In rare cases, this may change the behavior of your app.

  • Приложение необходимо публиковать для каждой целевой платформы.You must publish your app for each target platform.

Примеры с пошаговыми инструкциямиStep-by-step examples

Пошаговые примеры развертывания приложений .NET Core с помощью средств командной строки см. в этой статье.For step-by-step examples of deploying .NET Core apps with CLI tools, see Deploying .NET Core Apps with CLI Tools. Пошаговые примеры развертывания приложений .NET Core с помощью Visual Studio см. в этой статье.For step-by-step examples of deploying .NET Core apps with Visual Studio, see Deploying .NET Core Apps with Visual Studio.

См. такжеSee also