Сведения о .NET CoreAbout .NET Core

.NET Core обладает следующими характеристиками:.NET Core has the following characteristics:

  • Кроссплатформенность. Поддержка операционных систем Windows, macOS и Linux.Cross-platform: Runs on Windows, macOS, and Linux operating systems.
  • Согласованность между архитектурами. Одинаковое выполнение кода в различных архитектурах, включая x64, x86 и ARM.Consistent across architectures: Runs your code with the same behavior on multiple architectures, including x64, x86, and ARM.
  • Программы командной строки. Удобные инструменты для локальной разработки и сценариев непрерывной интеграции.Command-line tools: Includes easy-to-use command-line tools that can be used for local development and in continuous-integration scenarios.
  • Гибкая разработка. Может включаться в приложение или устанавливаться параллельно (на уровне пользователя или системы).Flexible deployment: Can be included in your app or installed side-by-side (user-wide or system-wide installations). Возможность использования с контейнерами Docker.Can be used with Docker containers.
  • Совместимость. Платформа .NET Core совместима с .NET Framework, Xamarin и Mono благодаря .NET Standard.Compatible: .NET Core is compatible with .NET Framework, Xamarin, and Mono, via .NET Standard.
  • Открытый код. Платформа .NET Core имеет открытый код и распространяется по лицензиям MIT и Apache 2.Open source: The .NET Core platform is open source, using MIT and Apache 2 licenses. .NET Core является проектом .NET Foundation..NET Core is a .NET Foundation project.
  • Поддержка от Майкрософт. Корпорация Майкрософт предоставляет поддержку .NET Core.Supported by Microsoft: .NET Core is supported by Microsoft, per .NET Core Support.

ЯзыкиLanguages

.NET Core позволяет создавать приложения и библиотеки на языках C#, Visual Basic и F#.C#, Visual Basic, and F# languages can be used to write applications and libraries for .NET Core. Эти языки можно использовать в вашем любимом текстовом редакторе либо интегрированной среде разработки (IDE), включая следующие.These languages can be used in your favorite text editor or Integrated Development Environment (IDE), including:

Интеграция возможна во многом благодаря участникам проектов OmniSharp и Ionide.This integration is provided, in part, by the contributors of the OmniSharp and Ionide projects.

API - интерфейсыAPIs

.NET Core предоставляет API-интерфейсы для множества сценариев, в некоторых из которых используются:.NET Core exposes APIs for many scenarios, a few of which follow:

Благодаря поддержке спецификации .NET Standard платформа .NET Core совместима с .NET Framework и API-интерфейсами Mono..NET Core provides compatibility with .NET Framework and Mono APIs by implementing the .NET Standard specification.

ИнфраструктурыFrameworks

На основе .NET Core было создано множество платформ:Multiple frameworks have been built on top of .NET Core:

КомпозицияComposition

.NET Core состоит из перечисленных ниже компонентов..NET Core is composed of the following parts:

  • Среда выполнения .NET Core предоставляет систему типов, функции загрузки сборок, сборщик мусора, собственные функции взаимодействия и другие базовые службы.The .NET Core runtime, which provides a type system, assembly loading, a garbage collector, native interop, and other basic services. Библиотеки платформы .NET Core предоставляют примитивные типы данных, типы компоновки приложений и базовые служебные программы..NET Core framework libraries provide primitive data types, app composition types, and fundamental utilities.
  • Среда выполнения ASP.NET Core — это платформа для создания современных облачных приложений, подключенных к Интернету: веб-приложений, приложений Интернета вещей, серверной части мобильных решений и многого другого.The ASP.NET Core runtime, which provides a framework for building modern cloud-based internet connected applications, such as web apps, IoT apps, and mobile backends.
  • .NET Core CLI и компиляторы языков (Roslyn и F#) реализуют возможности разработки .NET Core.The .NET Core SDK and language compilers (Roslyn and F#) that enable the .NET Core developer experience.
  • Команда dotnet используется для запуска приложений .NET Core и CLI.The dotnet command, which is used to launch .NET Core apps and CLI commands. Оно выбирает среду выполнения, размещает ее, предоставляет политику загрузки сборок и запускает приложения и инструменты.It selects the runtime and hosts the runtime, provides an assembly loading policy, and launches apps and tools.

Эти компоненты распределены следующим образом:These components are distributed in the following ways:

Открытый кодOpen source

Платформа .NET Core имеет открытый исходный код (по лицензии MIT) и была передана корпорацией Майкрософт в фонд .NET Foundation в 2014 году..NET Core is open source (MIT license) and was contributed to the .NET Foundation by Microsoft in 2014. Теперь это один из самых активно развивающихся проектов .NET Foundation.It's now one of the most active .NET Foundation projects. Частные лица и организации могут использовать платформу в личных, образовательных или коммерческих целях.It can be used by individuals and companies, including for personal, academic, or commercial purposes. Многие компании используют .NET Core в составе своих приложений, средств, новых платформ и услуг размещения.Multiple companies use .NET Core as part of apps, tools, new platforms, and hosting services. Некоторые из них вносят существенный вклад в проект .NET Core на портале GitHub и участвуют в управлении его развитием в рамках Координационного совета .NET Foundation.Some of these companies make significant contributions to .NET Core on GitHub and provide guidance on the product direction as part of the .NET Foundation Technical Steering Group.

Поддержка адаптируемостиDesigned for adaptability

Платформа .NET Core создавалась как подобная другим продуктам .NET, но со своими уникальными возможностями..NET Core has been built as a similar but unique product compared to other .NET products. При ее разработке ставилась цель обеспечить максимальную адаптируемость к новым платформам и рабочим нагрузкам. У нее есть порты на несколько ОС и ЦП, и она поддерживает перенос на многие другие платформы.It was designed to enable broad adaptability to new platforms and workloads and it has several OS and CPU ports available (and it may be ported to many more).

Продукт состоит из нескольких компонентов, каждый из которых может быть адаптирован к новым платформам отдельно и в разное время.The product is broken into several pieces, enabling the various parts to be adapted to new platforms at different times. Среда выполнения и основные библиотеки, связанные с платформой, должны переноситься как единое целое.The runtime and platform-specific foundational libraries must be ported as a unit. Не зависящие от платформы библиотеки должны работать "как есть" на любой платформе.Platform-agnostic libraries should work as-is on all platforms, by construction. В рамках проекта имеется тенденция к ограничению реализаций, предназначенных для конкретных платформ, с целью повышения эффективности разработки: если алгоритм или интерфейс API можно полностью или частично реализовать с помощью независимого от платформы кода C#, предпочтение отдается именно такому варианту.There's a project bias towards reducing platform-specific implementations to increase developer efficiency, preferring platform-neutral C# code whenever an algorithm or API can be implemented in-full or in-part that way.

Люди часто спрашивают, как реализована поддержка нескольких операционных систем в .NET Core.People commonly ask how .NET Core is implemented in order to support multiple operating systems. Часто задают вопрос, имеются ли отдельные реализации или используется условная компиляция.They typically ask if there are separate implementations or if conditional compilation is used. Используются оба подхода, но с явным уклоном в сторону условной компиляции.It's both, with a strong bias towards conditional compilation.

На приведенной ниже диаграмме видно, что библиотеки .NET Core в основном представляют собой неспециализированный код, который используется на всех платформах.You can see in the following chart that the vast majority of .NET Core libraries is platform-neutral code that is shared across all platforms. Независимый от платформы код можно реализовать в виде одной переносимой сборки для всех платформ.Platform-neutral code can be implemented as a single portable assembly that is used on all platforms.

CoreFX: строки кода для каждой платформы

Реализации для Windows и Unix имеют сходный размер.Windows and Unix implementations are similar in size. Размер реализации для Windows больше, так как библиотеки .NET Core реализуют некоторые возможности, относящиеся только к Windows, такие как Microsoft.Win32.Registry, но пока не реализует многие функции, характерные только для UNIX.Windows has a larger implementation since .NET Core libraries implements some Windows-only features, such as Microsoft.Win32.Registry but doesn't yet implement many Unix-only concepts. Также видно, что реализации для Linux и Mac OS используются в реализации для Unix, в то время как сами они имеют примерно одинаковый размер.You'll also see that the majority of the Linux and macOS implementations are shared across a Unix implementation, while the Linux and macOS-specific implementations are roughly similar in size.

Платформа .NET Core состоит из сочетания зависимых и независимых от платформы библиотек.There's a mix of platform-specific and platform-neutral libraries in .NET Core. Это можно проследить на ряде примеров.You can see the pattern in a few examples:

  • Библиотека CoreCLR зависит от платформы.CoreCLR is platform-specific. Она построена на основе подсистем ОС, таких как диспетчер памяти и планировщик потоков.It builds on top of OS subsystems, like the memory manager and thread scheduler.
  • Библиотеки System.IO и System.Security.Cryptography.Algorithms зависят от платформ, так как API-интерфейсы хранения и шифрования данных различаются в каждой ОС.System.IO and System.Security.Cryptography.Algorithms are platform-specific, given that storage and cryptography APIs are different on each OS.
  • Библиотеки System.Collections и System.Linq не зависят от платформы, так как они создают структуры данных и работают с ними.System.Collections and System.Linq are platform-neutral, given that they create and operate over data structures.

Сравнение с другими реализациями .NETComparisons to other .NET implementations

Масштаб и значение .NET Core проще понять в сравнении с существующими реализациями .NET.It's probably easier to understand the size and shape of .NET Core by comparing it to existing .NET implementations.

Сравнение с .NET FrameworkComparison with .NET Framework

Платформа .NET была представлена корпорацией Майкрософт в 2000 году и с тех пор прошла долгий путь развития..NET was first announced by Microsoft in 2000 and then evolved from there. .NET Framework была основной реализацией .NET, которую корпорация Майкрософт предлагала почти два десятилетия.The .NET Framework has been the primary .NET implementation produced by Microsoft during that nearly two decade period.

Основные различия между .NET Core и .NET FrameworkThe major differences between .NET Core and the .NET Framework:

  • Модели приложений — .NET Core поддерживает не все модели приложений платформы .NET Framework.App-models -- .NET Core doesn't support all the .NET Framework app-models. В частности, не поддерживаются веб-формы ASP.NET и ASP.NET MVC, однако поддерживается ASP.NET Core MVC.In particular, it doesn't support ASP.NET Web Forms and ASP.NET MVC, but it supports ASP.NET Core MVC. Начиная с версии .NET Core 3.0, платформа .NET Core также поддерживает WPF и Windows Forms только в Windows.And starting with .NET Core 3.0, .NET Core also supports WPF and Windows Forms on Windows only.
  • API-интерфейсы — .NET Core включает обширное подмножество библиотеки базовых классов .NET Framework с отличающейся организацией кода (другие имена сборок и ключевые отличия в членах, предоставляемых для типов).APIs -- .NET Core contains a large subset of .NET Framework Base Class Library, with a different factoring (assembly names are different; members exposed on types differ in key cases). В некоторых случаях эти различия требуют внесения изменений для переноса исходного кода в .NET Core.In some cases, these differences require changes to port source to .NET Core. См. дополнительные сведения об анализаторе переносимости .NET.For more information, see The .NET Portability Analyzer. .NET Core реализует спецификацию API .NET Standard..NET Core implements the .NET Standard API specification.
  • Подсистемы. Платформа .NET Core реализует подмножество подсистем .NET Framework с целью упрощения реализации и модели программирования.Subsystems -- .NET Core implements a subset of the subsystems in the .NET Framework, with the goal of a simpler implementation and programming model. Например, управление доступом для кода (CAS) не поддерживается, а отражение поддерживается.For example, Code Access Security (CAS) isn't supported, while reflection is supported.
  • Платформы. Платформа .NET Framework поддерживает Windows и Windows Server, в то время как .NET Core также поддерживает Mac OS и Linux.Platforms -- The .NET Framework supports Windows and Windows Server while .NET Core also supports macOS and Linux.
  • Открытый исходный код. Платформа .NET Core имеет открытый исходный код. В случае с .NET Framework открытый исходный код имеет только подмножество библиотек, доступных только для чтения.Open Source -- .NET Core is open source, while a read-only subset of the .NET Framework is open source.

Хотя платформа .NET Core является уникальной и существенно отличается от .NET Framework и других реализаций .NET, вы можете легко использовать один и тот же код в разных реализациях как в формате исходного кода, так и в виде двоичных файлов.While .NET Core is unique and has significant differences to the .NET Framework and other .NET implementations, it's straightforward to share code between these implementations, using either source or binary sharing techniques.

Так как .NET Core поддерживает параллельную установку, а среда выполнения этого решения полностью независима от .NET Framework, его можно без каких-либо проблем установить на компьютерах с .NET Framework.Because .NET Core supports side-by-side installation and its runtime is completely independent of the .NET Framework, it can be installed on machines with .NET Framework installed without any issues.

Сравнение с MonoComparison with Mono

Mono — это первая кроссплатформенная реализация .NET.Mono is the original cross-platform implementation of .NET. Изначально она создавалась как альтернатива платформе .NET Framework с открытым кодом, но с ростом популярности устройств iOS и Android была переориентирована на мобильные устройства.It started out as an open-source alternative to .NET Framework and transitioned to targeting mobile devices as iOS and Android devices became popular. Ее можно считать аналогом .NET Framework, предоставляемым сообществом.It can be thought of as a community clone of the .NET Framework. Команда проекта Mono использовала открытые стандарты .NET (в частности, ECMA 335), опубликованные корпорацией Майкрософт, для предоставления совместимой реализации.The Mono project team relied on the open .NET standards (notably ECMA 335) published by Microsoft to provide a compatible implementation.

Основные различия между .NET Core и MonoThe major differences between .NET Core and Mono:

  • Модели приложений. Mono поддерживает подмножество моделей приложений .NET Framework (например, Windows Forms), а также ряд дополнительных моделей для разработки мобильных приложений (например, Xamarin.iOS) посредством продукта Xamarin.App-models -- Mono supports a subset of the .NET Framework app-models (for example, Windows Forms) and some additional ones for mobile development (for example, Xamarin.iOS) through the Xamarin product. Платформа .NET Core не поддерживает Xamarin..NET Core doesn't support Xamarin.
  • Интерфейсы API. Mono поддерживает большое подмножество интерфейсов API .NET Framework с использованием тех же имен сборок и факторинга.APIs -- Mono supports a large subset of the .NET Framework APIs, using the same assembly names and factoring.
  • Платформы. Mono поддерживает множество платформ и ЦП.Platforms -- Mono supports many platforms and CPUs.
  • Открытый исходный код. Как Mono, так и .NET Core распространяются по лицензии MIT и являются проектами .NET Foundation.Open Source -- Mono and .NET Core both use the MIT license and are .NET Foundation projects.
  • Концентрация. В последние годы платформа Mono в первую очередь нацелена на мобильные платформы, в то время как платформа .NET Core ориентирована на рабочие нагрузки для облака и настольных компьютеров.Focus -- The primary focus of Mono in recent years is mobile platforms, while .NET Core is focused on cloud and desktop workloads.

Дальнейшее развитиеThe future

Было объявлено, что следующим выпуском .NET Core станет версия .NET 5, которая будет призвана унифицировать платформу.It was announced that .NET 5 will be the next release of .NET Core and represents a unification of the platform. Этот проект предназначен для улучшения .NET по ряду направлений:The project aims to improve .NET in a few key ways:

  • создание одной среды выполнения и платформы .NET, которую можно использовать везде, с единообразными возможностями для разработчиков и поведением во время выполнения;Produce a single .NET runtime and framework that can be used everywhere and that has uniform runtime behaviors and developer experiences.
  • расширение возможностей .NET за счет лучших функций .NET Core, .NET Framework, Xamarin и Mono;Expand the capabilities of .NET by taking the best of .NET Core, .NET Framework, Xamarin, and Mono.
  • создание продукта на основе единой базы кода, которую разработчики (корпорация Майкрософт и участники сообщества) могут улучшать и развивать вместе.Build that product out of a single code-base that developers (Microsoft and the community) can work on and expand together and that improves all scenarios.

Дополнительные сведения о планируемых возможностях .NET 5 см. в статье Представляем .NET 5.For more details about what's being planned for .NET 5, see Introducing .NET 5.