Выбор между .NET Core и .NET Framework для серверных приложенийChoosing between .NET Core and .NET Framework for server apps

Серверные приложения на платформе .NET можно разрабатывать в двух поддерживаемых реализациях: .NET Framework и .NET Core.There are two supported implementations for building server-side applications with .NET: .NET Framework and .NET Core. В них используется множество одинаковых компонентов, а код можно использовать как в одной среде, так и в другой.Both share many of the same components and you can share code across the two. Но между этими двумя средами также существуют и фундаментальные различия. Поэтому ваш выбор зависит от поставленной задачи.However, there are fundamental differences between the two and your choice depends on what you want to accomplish. В этой статье содержатся рекомендации по использованию каждой из двух сред выполнения.This article provides guidance on when to use each.

Используйте среду .NET Core для создания серверных приложений в следующих случаях:Use .NET Core for your server application when:

  • для создания кроссплатформенных решений;You have cross-platform needs.
  • для создания решений, ориентированных на микрослужбы;You are targeting microservices.
  • при использовании контейнеров Docker;You are using Docker containers.
  • если нужны масштабируемые системы с высокой производительностью;You need high-performance and scalable systems.
  • для создания приложений с поддержкой разных версий .NET.You need side-by-side .NET versions per application.

Используйте среду .NET Framework для создания серверных приложений в следующих случаях:Use .NET Framework for your server application when:

  • приложение в настоящий момент использует среду .NET Framework (мы рекомендуем расширять приложения, а не переносить их в другую среду);Your app currently uses .NET Framework (recommendation is to extend instead of migrating).
  • приложение использует сторонние библиотеки .NET или пакеты NuGet, недоступные для .NET Core;Your app uses third-party .NET libraries or NuGet packages not available for .NET Core.
  • приложение использует технологии .NET, недоступные для .NET Core;Your app uses .NET technologies that aren't available for .NET Core.
  • приложение использует платформу, не поддерживающую .NET Core.Your app uses a platform that doesn’t support .NET Core.

Случаи использования .NET CoreWhen to choose .NET Core

В следующих разделах более детально описаны указанные ранее причины для выбора платформы .NET Core.The following sections give a more detailed explanation of the previously stated reasons for picking .NET Core.

Создание кроссплатформенных приложенийCross-platform needs

Если вам нужно создать приложение (веб-приложение или службу) с поддержкой разных платформ (Windows, Linux и macOS), рекомендуется использовать .NET Core.If your application (web/service) needs to run on multiple platforms (Windows, Linux, and macOS), use .NET Core.

В среде .NET Core также можно использовать упомянутые ранее операционные системы в качестве рабочих станций для разработки..NET Core supports the previously mentioned operating systems as your development workstation. Visual Studio предоставляет интегрированную среду разработки (IDE) для Windows и macOS.Visual Studio provides an Integrated Development Environment (IDE) for Windows and macOS. Можно также использовать редактор Visual Studio Code, который выполняется на платформах macOS, Linux и Windows.You can also use Visual Studio Code, which runs on macOS, Linux, and Windows. Visual Studio Code поддерживает .NET Core, включая технологию IntelliSense и отладку.Visual Studio Code supports .NET Core, including IntelliSense and debugging. С .NET Core работает большинство сторонних редакторов, например Sublime, Emacs и VI.Most third-party editors, such as Sublime, Emacs, and VI, work with .NET Core. Эти сторонние редакторы получают доступ к функциям в редакторе IntelliSense с помощью Omnisharp.These third-party editors get editor IntelliSense using Omnisharp. Платформа .NET Core полагается не только на редакторы. Приложения здесь можно создавать непосредственно с помощью средств командной строки, доступных для всех поддерживаемых платформ.You can also avoid any code editor and directly use the .NET Core CLI tools, available for all supported platforms.

Архитектура микрослужбMicroservices architecture

Архитектура микрослужб позволяет использовать сочетание технологий за пределами службы.A microservices architecture allows a mix of technologies across a service boundary. Такое сочетание технологий позволяет постепенно добавлять новые микросолужбы в .NET Core для параллельного использования с другими микрослужбами и службами.This technology mix enables a gradual embrace of .NET Core for new microservices that work with other microservices or services. Например, можно комбинировать микрослужбы или службы, созданные на основе .NET Framework, Java, Ruby или других монолитные технологий.For example, you can mix microservices or services developed with .NET Framework, Java, Ruby, or other monolithic technologies.

Пользователям на выбор предоставляется множество инфраструктурных платформ.There are many infrastructure platforms available. Для больших и сложных систем микрослужб можно использовать Azure Service Fabric.Azure Service Fabric is designed for large and complex microservice systems. Служба приложений Azure лучше всего подойдет для микрослужб без сохранения состояния.Azure App Service is a good choice for stateless microservices. Альтернативы микрослужб на основе Docker поддерживают любые подходы, как описано в разделе Контейнеры.Microservices alternatives based on Docker fit any kind of microservices approach, as explained in the Containers section. Все эти платформы поддерживают .NET Core и идеально подходят для размещения микрослужб.All these platforms support .NET Core and make them ideal for hosting your microservices.

Дополнительные сведения об архитектуре микрослужб см. в статье Микрослужбы .NET: архитектура контейнерных приложений .NET.For more information about microservices architecture, see .NET Microservices. Architecture for Containerized .NET Applications.

КонтейнерыContainers

Контейнеры обычно используются вместе с архитектурой микрослужб.Containers are commonly used in conjunction with a microservices architecture. Их также можно использовать, чтобы поместить в контейнер веб-приложения или службы на базе любого архитектурного шаблона.Containers can also be used to containerize web apps or services that follow any architectural pattern. Среду .NET Framework можно использовать для контейнеров Windows, но упрощенные возможности и модульный принцип среды .NET Core делают ее оптимальной для контейнеров..NET Framework can be used on Windows containers, but the modularity and lightweight nature of .NET Core makes it a better choice for containers. При создании и развертывании контейнера размер его образа гораздо меньше в среде .NET Core.When creating and deploying a container, the size of its image is much smaller with .NET Core than with .NET Framework. Так как эта среда поддерживает разные платформы, серверные приложения можно развертывать, например, в контейнеры Docker в Linux.Because it's cross-platform, you can deploy server apps to Linux Docker containers, for example.

Затем эти контейнеры можно размещать в собственной инфраструктуре Linux или Windows или в облачной службе,такой как Служба Azure Kubernetes.Docker containers can be hosted in your own Linux or Windows infrastructure, or in a cloud service such as Azure Kubernetes Service. Служба Azure Kubernetes может выполнять оркестрацию и масштабировать приложения на основе контейнеров, а также управлять ими в облаке.Azure Kubernetes Service can manage, orchestrate, and scale container-based applications in the cloud.

Масштабируемые системы с высокой производительностьюA need for high-performance and scalable systems

Если для вашей системы требуется максимальная производительность и возможности масштабирования, мы рекомендуем использовать среды .NET Core и ASP.NET Core.When your system needs the best possible performance and scalability, .NET Core and ASP.NET Core are your best options. Высокопроизводительная серверная среда выполнения для Windows Server и Linux делает .NET самой эффективной веб-платформой в тестах TechEmpower.High-performance server runtime for Windows Server and Linux makes .NET a top performing web framework on TechEmpower benchmarks.

Производительность и масштабируемость особенно важны для архитектур микрослужб, где могут выполняться сотни микрослужб.Performance and scalability are especially relevant for microservices architectures, where hundreds of microservices may be running. Среда ASP.NET Core позволяет уменьшить количество серверов и виртуальных машин, необходимых для системы.With ASP.NET Core, systems run with a much lower number of servers/Virtual Machines (VM). В конечном счете это способствует сокращению расходов на архитектуру и размещение.The reduced servers/VMs save costs in infrastructure and hosting.

Создание приложений с поддержкой разных версий .NETA need for side by side of .NET versions per application level

Если требуется установить приложения с зависимостями в разных версиях платформ .NET, рекомендуется использовать среду .NET Core.To install applications with dependencies on different versions of .NET, we recommend .NET Core. .NET core предлагает-параллельную установку разных версий среды выполнения .NET Core на том же компьютере..NET Core offers side-by-side installation of different versions of the .NET Core runtime on the same machine. За счет простой параллельной установки на одном сервере можно размещать несколько служб, каждая из которых устанавливается на собственной версии .NET Core.This side-by-side installation allows multiple services on the same server, each of them on its own version of .NET Core. Это позволяет устранить риски и сократить расходы на обновление приложений и ИТ-операции.It also lowers risks and saves money in application upgrades and IT operations.

Случаи использования .NET FrameworkWhen to choose .NET Framework

Среда .NET Core предоставляет значительные преимущества для новых приложений и шаблонов приложений..NET Core offers significant benefits for new applications and application patterns. Но платформа .NET Framework остается оптимальным выбором во многих ситуациях, поэтому .NET Core не заменит .NET Framework для всех серверных приложений.However, the .NET Framework continues to be the natural choice for many existing scenarios and as such the .NET Framework isn't replaced by .NET Core for all server applications.

Готовые приложения .NET FrameworkCurrent .NET Framework applications

В большинстве случаев вам не потребуется переносить готовые приложения в среду .NET Core.In most cases, you don’t need to migrate your existing applications to .NET Core. Взамен мы советуем использовать .NET Core для расширения готовых приложений, например для написания новой веб-службы в ASP.NET Core.Instead, a recommended approach is to use .NET Core as you extend an existing application, such as writing a new web service in ASP.NET Core.

Поддержка сторонних библиотек .NET или пакетов NuGet, недоступных для .NET CoreA need to use third-party .NET libraries or NuGet packages not available for .NET Core

Библиотеки быстро распространяются в .NET Standard.Libraries are quickly embracing .NET Standard. .NET Standard позволяет совместно использовать код во всех реализациях .NET, включая .NET Core..NET Standard enables sharing code across all .NET implementations including .NET Core. С .NET Standard 2.0 это стало еще проще.With .NET Standard 2.0, this is even easier:

  • Значительно расширен API-интерфейс.The API surface became much larger.
  • Появился режим совместимости .NET Framework.Introduced a .NET Framework compatibility mode. Этот режим совместимости позволяет проектам .NET Standard и .NET Core ссылаться на библиотеки .NET Framework.This compatibility mode allows .NET Standard/.NET Core projects to reference .NET Framework libraries. Дополнительные сведения о режиме совместимости см. в статье Объявление о выпуске .NET Standard 2.0.To learn more about the compatibility mode, see Announcing .NET Standard 2.0.

Таким образом, платформу .NET Framework следует применять только в случаях, где библиотеки или пакеты NuGet используют технологии, которые недоступны в .NET Standard и .NET Core.So only in cases where the libraries or NuGet packages use technologies that aren't available in .NET Standard/.NET Core, you need to use the .NET Framework.

Поддержка технологий .NET, недоступных для .NET CoreA need to use .NET technologies not available for .NET Core

Некоторые технологии .NET Framework недоступны в среде .NET Core.Some .NET Framework technologies aren't available in .NET Core. Поддержка некоторых из них будет добавлена в последующих выпусках .NET Core.Some of them might be available in later .NET Core releases. Остальные технологии не применяются к новым шаблонам приложений, используемым в среде .NET Core, и будут недоступными всегда.Others don’t apply to the new application patterns targeted by .NET Core and may never be available. Ниже приведен список самых распространенных технологий, которые недоступны в .NET Core.The following list shows the most common technologies not found in .NET Core:

  • Приложения веб-форм ASP.NET. Веб-формы ASP.NET доступны только в среде .NET Framework.ASP.NET Web Forms applications: ASP.NET Web Forms are only available in the .NET Framework. ASP.NET Core не может использоваться для веб-форм ASP.NET.ASP.NET Core cannot be used for ASP.NET Web Forms. Добавление веб-форм ASP.NET в среду .NET Core не планируется.There are no plans to bring ASP.NET Web Forms to .NET Core.

  • Приложения веб-страниц ASP.NET. Веб-страницы ASP.NET не добавлены в среду ASP.NET Core.ASP.NET Web Pages applications: ASP.NET Web Pages aren't included in ASP.NET Core.

  • Реализация служб WCF.WCF services implementation. Хотя в среду .NET Core и добавлена библиотека клиента WCF, позволяющая использовать службы WCF, сервер WCF можно реализовать только в среде .NET Framework.Even when there’s a WCF-Client library to consume WCF services from .NET Core, WCF server implementation is currently only available in the .NET Framework. Этот сценарий не входит в текущий план для .NET Core, но он будет рассмотрен в будущем.This scenario is not part of the current plan for .NET Core but it’s being considered for the future.

  • Службы, связанные с рабочими процессами. Службы Windows Workflow Foundation (WF), Workflow Services (WCF и WF в одной службе) и WCF Data Services (ранее известные как службы данных ADO.NET) доступны только в составе платформы .NET Framework.Workflow-related services: Windows Workflow Foundation (WF), Workflow Services (WCF + WF in a single service) and WCF Data Services (formerly known as "ADO.NET Data Services") are only available in the .NET Framework. Добавление служб WF, WCF и WF, WCF Data Services в .NET Core не планируется.There are no plans to bring WF/WCF+WF/WCF Data Services to .NET Core.

  • Поддержка языков. Сейчас в среде .NET Core поддерживаются Visual Basic и F#, но не для всех типов проектов.Language support: Visual Basic and F# are currently supported in .NET Core, but not for all project types. Список поддерживаемых шаблонов проектов см. в статье о параметрах шаблона для dotnet new.For a list of supported project templates, see Template options for dotnet new.

Кроме платформ, указанных в официальной стратегии, существуют и другие платформы, которые можно перенести в среду .NET Core.In addition to the official roadmap, there are other frameworks to be ported to .NET Core. Полный список см. в репозитории CoreFX. Эти платформы помечены как port-to-core.For a full list, see the CoreFX issues marked as port-to-core. Корпорация Майкрософт не намеревается добавлять эти компоненты в среду .NET Core.This list doesn’t represent a commitment from Microsoft to bring those components to .NET Core. Компоненты, добавленные в список, отражают желания пользователей сообщества.They're simply capturing the desire from the community to do so. Тем не менее, если вас заинтересовал любой из компонентов, помеченный как port-to-core, примите участие в обсуждениях на сайте GitHub.If you care about any of the components marked as port-to-core, participate in the discussions on GitHub. Если вы думаете, что чего-то не хватает, отправьте новый вопрос в репозиторий CoreFX.And if you think something is missing, file a new issue in the CoreFX repository.

Использование платформы, не поддерживающей .NET CoreA need to use a platform that doesn’t support .NET Core

Некоторые платформы Майкрософт и платформы сторонних поставщиков не поддерживают среду .NET Core.Some Microsoft or third-party platforms don’t support .NET Core. Некоторые службы Azure предоставляют пакеты SDK, недоступные в среде .NET Core.Some Azure services provide an SDK not yet available for consumption on .NET Core. Это временные обстоятельства, так как все службы Azure используют среду .NET Core.This is a transitional circumstance, as all of Azure services use .NET Core. В то же время в качестве альтернативы клиентскому пакету SDK всегда можно использовать REST API.In the meantime, you can always use the equivalent REST API instead of the client SDK.

См. такжеSee also