.NET Standard.NET Standard

.NET Standard представляет собой официальную спецификацию интерфейсов API .NET, которые должны быть доступны во всех реализациях .NET.The .NET Standard is a formal specification of .NET APIs that are intended to be available on all .NET implementations. .NET Standard создана для того, чтобы повысить согласованность экосистемы .NET.The motivation behind the .NET Standard is establishing greater uniformity in the .NET ecosystem. ECMA 335 продолжает обеспечивать единообразие для реализации .NET, но аналогичные спецификации для библиотек базовых классов (BCL) .NET для реализаций библиотек .NET отсутствуют.ECMA 335 continues to establish uniformity for .NET implementation behavior, but there is no similar spec for the .NET Base Class Libraries (BCL) for .NET library implementations.

.NET Standard предоставляет следующие важные возможности:The .NET Standard enables the following key scenarios:

  • Определяет унифицированный набор API-интерфейсов BCL для реализации всеми реализациями .NET независимо от рабочей нагрузки.Defines uniform set of BCL APIs for all .NET implementations to implement, independent of workload.
  • Позволяет разработчикам создавать переносимые библиотеки, которые могут использоваться в разных реализациях .NET, с помощью одного набора API-интерфейсов.Enables developers to produce portable libraries that are usable across .NET implementations, using this same set of APIs.
  • Позволяет сократить или даже устранить условную компиляцию общего источника из-за API-интерфейсов .NET (только для API операционной системы).Reduces or even eliminates conditional compilation of shared source due to .NET APIs, only for OS APIs.

Различные реализации .NET реализуют конкретные версии .NET Standard.The various .NET implementations target specific versions of .NET Standard. Каждая версия реализации .NET ориентирована на использование максимальной поддерживаемой ею версии .NET Standard. Это также означает, что она поддерживает и предыдущие версии.Each .NET implementation version advertises the highest .NET Standard version it supports, a statement that means it also supports previous versions. Например, платформа .NET Framework 4.6 реализует .NET Standard 1.3, то есть предоставляет все API-интерфейсы, определенные в стандартах .NET Standard версий с 1.0 до 1.3.For example, the .NET Framework 4.6 implements .NET Standard 1.3, which means that it exposes all APIs defined in .NET Standard versions 1.0 through 1.3. Аналогичным образом платформа .NET Framework 4.6.1 реализует .NET Standard 1.4, а .NET Core 1.0 — .NET Standard 1.6.Similarly, the .NET Framework 4.6.1 implements .NET Standard 1.4, while .NET Core 1.0 implements .NET Standard 1.6.

Поддержка реализации .NET.NET implementation support

В следующей таблице перечислены все версии .NET Standard и поддерживаемые платформы:The following table lists all versions of .NET Standard and the platforms supported:

.NET Standard 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0
.NET Core 1,0 1,0 1,0 1,0 1,0 1,0 1,0 2.0
.NET Framework (с SDK-пакетом .NET Core 1.x) 4.5 4.5 4.5.1 4.6 4.6.1 4.6.2
.NET Framework (с SDK-пакетом .NET Core 2.0) 4.5 4.5 4.5.1 4.6 4.6.1 4.6.1 4.6.1 4.6.1
Mono 4.6 4.6 4.6 4.6 4.6 4.6 4.6 5,4
Xamarin.iOS 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.14
Xamarin.Mac 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.8
Xamarin.Android 7.0 7.0 7.0 7.0 7.0 7.0 7.0 8.0
Универсальная платформа Windows 10.0 10.0 10.0 10.0 10.0 vNext vNext vNext
Windows 8.0 8.0 8.1
Windows Phone 8.1 8.1 8.1
Windows Phone Silverlight 8.0
  • Столбцы представляют версии .NET Standard. Каждая ячейка заголовка содержит ссылку на документ, который показывает, какие интерфейсы API добавлены в соответствующей версии .NET Standard.
  • Строки представляют различные реализации .NET.
  • Номер версии в каждой ячейке обозначает минимальную версию реализации, которая потребуется для работы с соответствующей версией .NET Standard.

Чтобы найти самую высокую версию .NET Standard, на которую можно ориентироваться, выполните следующее:To find the highest version of .NET Standard that you can target, do the following:

  1. Найдите строку, которая соответствует вашей реализации .NET.Find the row that indicate the .NET implementation you want to run on.
  2. Двигаясь по этой строке справа налево, найдите столбец, который содержит вашу версию платформы.Find the column in that row that indicates your version starting from right to left.
  3. В заголовке этого столбца вы увидите версию .NET Standard, которую поддерживает ваша целевая платформа (соответственно, поддерживаются и все более ранние версии .NET Standard).The column header indicates the .NET Standard version that your target supports (and any lower .NET Standard versions will also support it).
  4. Повторите эту процедуру для всех платформ, с которыми вы будете работать.Repeat this process for each platform you want to target. Если целевых платформ несколько, выберите из них самую младшую версию.If you have more than one target platform, you should pick the smaller version among them. Например, если вы хотите работать с .NET Framework 4.5 и .NET Core 1.0, наивысшей доступной версией .NET Standard будет .NET Standard 1.1.For example, if you want to run on .NET Framework 4.5 and .NET Core 1.0, the highest .NET Standard version you can use is .NET Standard 1.1.

Какую версию .NET Standard выбрать в качестве целевойWhich .NET Standard version to target

При выборе версии .NET Standard перед вами стоит такая дилемма:When choosing a .NET Standard version, you should consider this trade-off:

  • Чем выше версия, тем больше вам доступно интерфейсов API.The higher the version, the more APIs are available to you.
  • Чем ниже версия, тем больше платформ ее поддерживают.The lower the version, the more platforms implement it.

В общем случае мы рекомендуем выбирать наименьшую из возможных версий .NET Standard.In general, we recommend you to target the lowest version of .NET Standard possible. После того, как вы определите номер наибольшей возможной версии .NET Standard, выполните следующие действия.So, after you find the highest .NET Standard version you can target, follow these steps:

  1. Выберите предыдущую версию .NET Standard, создайте и соберите проект для нее.Target the next lower version of .NET Standard and build your project.
  2. Если сборка проекта пройдет успешно, повторите шаг 1.If your project builds successfully, repeat step 1. В противном случае вернитесь к предыдущей, более высокой, версии, и используйте именно ее.Otherwise, retarget to the next higher version and that's the version you should use.

Правила управления версиями .NET Standard.NET Standard versioning rules

Существует два основных правила управления версиями.There are two primary versioning rules:

  • Аддитивность. Все версии .NET Standard логически расширяются, то есть более поздние версии содержат все интерфейсы API предыдущих версий.Additive: .NET Standard versions are logically concentric circles: higher versions incorporate all APIs from previous versions. Отсутствуют критические изменения между версиями.There are no breaking changes between versions.
  • Неизменность.Immutable. Версии .NET после выпуска закрепляются в определенном состоянии.Once shipped, .NET Standard versions are frozen. Новые интерфейсы API сначала становятся доступными для конкретных реализаций .NET, например .NET Core.New APIs will first become available in specific .NET implementations, such as .NET Core. Если совет по утверждению .NET Standard решит, что новые интерфейсы API нужно сделать доступными на всех платформах, их добавляют в новую версию .NET Standard.If the .NET Standard review board believes the new APIs should be made available everywhere, they'll be added in a new .NET Standard version.

Сравнение с переносимыми библиотеками классовComparison to Portable Class Libraries

.NET Standard заменяет переносимые библиотеки классов (PCL)..NET Standard is the replacement for Portable Class Libraries (PCL). .NET Standard расширяет возможности создания переносимых библиотек, контролируя стандартную библиотеку BCL и обеспечивая высокую согласованность разных реализаций .NET.The .NET Standard improves on the experience of creating portable libraries by curating a standard BCL and establishing greater uniformity across .NET implementations as a result. Библиотека, нацеленная на библиотеку .NET Standard, именуется библиотекой PCL или "основанной на стандартах библиотекой PCL .NET".A library that targets .NET Standard is a PCL or a ".NET Standard-based PCL". Существующие библиотеки PCL представляют собой "PCL на основе профиля".Existing PCLs are "profile-based PCLs".

.NET Standard и профили PCL созданы для схожих целей, однако имеют существенные отличия..NET Standard and PCL profiles were created for similar purposes but also differ in key ways.

Сходства:Similarities:

  • Определяет API-интерфейсы, которые можно использовать для совместного использования двоичного кода.Defines APIs that can be used for binary code sharing.

Различия:Differences:

  • .NET Standard является проверенным набором API, а профили PCL определяются пересечениями существующих платформ..NET Standard is a curated set of APIs, while PCL profiles are defined by intersections of existing platforms.
  • .NET Standard имеет линейно возрастающие версии, чего нет в профилях PCL..NET Standard linearly versions, while PCL profiles do not.
  • Профили PCL относятся к платформам Майкрософт, а .NET Standard не зависит от платформы.PCL profiles represents Microsoft platforms while the .NET Standard is agnostic to platform.

СпецификацияSpecification

Спецификация .NET Standard представляет собой стандартизированный набор API.The .NET Standard specification is a standardized set of APIs. Она поддерживается реализаторами .NET, в частности корпорацией Майкрософт (для платформ .NET Framework, .NET Core и Mono) и Unity.The specification is maintained by .NET implementors, specifically Microsoft (includes .NET Framework, .NET Core and Mono) and Unity. При создании новых версий .NET Standard на GitHub используется процесс открытой обратной связи.A public feedback process is used as part of establishing new .NET Standard versions through GitHub.

Официальные артефактыOfficial artifacts

Официальная спецификация — это набор CS-файлов, которые определяют API, входящие в стандарт.The official specification is a set of .cs files that define the APIs that are part of the standard. ref directory в репозиторий dotnet/standard определяет стандартные API-интерфейсы .NET.The ref directory in the dotnet/standard repository defines the .NET Standard APIs.

Метапакет NETStandard.Library (источник) описывает набор библиотек, определяющих (частично) одну версию .NET Standard.или несколько.The NETStandard.Library metapackage (source) describes the set of libraries that define (in part) one or more .NET Standard versions.

Отдельный компонент, например System.Runtime, описывает следующее:A given component, like System.Runtime, describes:

  • часть .NET Standard (только область действия);Part of .NET Standard (just its scope).
  • несколько версий .NET Standard для данной области.Multiple versions of .NET Standard, for that scope.

Доступны производные артефакты, упрощающие чтение и реализующие определенные сценарии для разработчика (например, использование компилятора).Derivative artifacts are provided to enable more convenient reading and to enable certain developer scenarios (for example, using a compiler).

Представление пакетовPackage representation

Основным средством распространения ссылочных сборок .NET Standard являются пакеты NuGet.The primary distribution vehicle for the .NET Standard reference assemblies is NuGet packages. Соответствующие реализации будут предоставлены различными способами, наиболее уместными для каждой реализации .NET.Implementations will be delivered in a variety of ways, appropriate for each .NET implementation.

Пакеты NuGet нацелены на одну или несколько платформ.NuGet packages target one or more frameworks. Пакеты библиотеки .NET Standard нацелены на платформу ".NET Standard".The .NET Standard packages target the ".NET Standard" framework. Ориентироваться на платформу .NET Standard можно с помощью компактного моникера целевой платформы netstandard (например, netstandard1.4).You can target the .NET Standard Framework using the netstandard compact TFM (for example, netstandard1.4). Библиотеки, предназначенные для запуска в различных средах выполнения, должны быть нацелены на эту платформу.Libraries that are intended to run on multiple runtimes should target this framework.

Метапакет NETStandard.Library ссылается на полный набор пакетов NuGet, определяющих библиотеку .NET Standard.The NETStandard.Library metapackage references the complete set of NuGet packages that define .NET Standard. Наиболее распространенным способом нацеливания на netstandard является ссылка на этот метапакет.The most common way to target netstandard is by referencing this metapackage. Он описывает и предоставляет доступ примерно к 40 библиотекам .NET и связанным интерфейсам API, которые определяют библиотеку .NET Standard.It describes and provides access to the ~40 .NET libraries and associated APIs that define .NET Standard. Вы можете ссылаться на другие пакеты, предназначенные для netstandard, чтобы получить доступ к дополнительным интерфейсам API.You can reference additional packages that target netstandard to get access to additional APIs.

Управление версиямиVersioning

Это не отдельная спецификация, а постепенно расширяемый набор API с линейно возрастающими номерами версий.The specification is not singular, but an incrementally growing and linearly versioned set of APIs. Первая версия стандарта устанавливает базовый набор API.The first version of the standard establishes a baseline set of APIs. Последующие версии добавляют API и наследуют API, определенные в предыдущих версиях.Subsequent versions add APIs and inherit APIs defined by previous versions. Не существует установленных процедур для удаления API из стандарта.There is no established provision for removing APIs from the standard.

.NET Standard не связывается с какой-либо одной реализацией выполнения .NET и не зависит от схем управления версиями любой из сред выполнения..NET Standard is not specific to any one .NET implementation, nor does it match the versioning scheme of any of those runtimes.

API, добавляемые в любую из реализаций (например, .NET Framework, .NET Core и Mono), можно рассматривать как кандидаты для добавления в спецификацию, особенно в том случае, если они носят фундаментальный характер.APIs added to any of the implementations (such as, .NET Framework, .NET Core and Mono) can be considered as candidates to add to the specification, particularly if they are thought to be fundamental in nature. Новые версии .NET Standard создаются на основе выпусков реализаций .NET, что позволяет использовать новые API из библиотеки PCL .NET Standard.New versions of .NET Standard are created based on .NET implementation releases, enabling you to target new APIs from a .NET Standard PCL. Подробнее механизм управления версиями описан в разделе Управление версиями .NET Core.The versioning mechanics are described in more detail in .NET Core Versioning.

Управление версиями .NET Standard имеет важное значение при использовании..NET Standard versioning is important for usage. Зная версию .NET Standard, вы можете использовать все библиотеки, предназначенные для этой или более ранней версии.Given a .NET Standard version, you can use libraries that target that same or lower version. Ниже описан рабочий процесс использования библиотек PCL .NET Standard, ориентированных на конкретную версию .NET Standard.The following approach describes the workflow for using .NET Standard PCLs, specific to .NET Standard targeting.

  • Выберите версию .NET Standard для вашей библиотеки PCL.Select a .NET Standard version to use for your PCL.
  • Используйте библиотеки, которые зависят от той же или более низкой версии .NET Standard.Use libraries that depend on the same .NET Standard version or lower.
  • Если вам потребуется библиотека, которая зависит от более поздней версии .NET Standard, нужно перейти на эту версию либо отказаться от использования этой библиотеки.If you find a library that depends on a higher .NET Standard version, you either need to adopt that same version or decide not to use that library.

Совместимость библиотек PCLPCL compatibility

.NET Standard совместима с подмножеством профилей PCL..NET Standard is compatible with a subset of PCL profiles. Каждая из версий .NET Standard 1.0, 1.1 и 1.2 перекрывается с определенным набором профилей PCL..NET Standard 1.0, 1.1 and 1.2 each overlap with a set of PCL profiles. Такое перекрытие было создано по двум причинам:This overlap was created for two reasons:

  • Предоставление библиотекам PCL на основе .NET Standard права ссылаться на основанные на профилях PCL.Enable .NET Standard-based PCLs to reference profile-based PCLs.
  • Возможность упаковки основанных на профилях PCL в виде PCL на основе .NET Standard.Enable profile-based PCLs to be packaged as .NET Standard-based PCLs.

Совместимость основанных на профилях PCL обеспечивается за счет пакета NuGet Microsoft.NETCore.Portable.Compatibility.Profile-based PCL compatibility is provided by the Microsoft.NETCore.Portable.Compatibility NuGet package. Такая зависимость требуется при ссылке на пакеты NuGet, содержащие основанные на профилях PCL.This dependency is required when referencing NuGet packages that contain profile-based PCLs.

Основанные на профилях PCL, которые упакованы в виде netstandard, удобнее использовать, чем обычно упакованные PCL на основе профилей.Profile-based PCLs packaged as netstandard are easier to consume than typically packaged profile-based PCLs. Упаковка netstandard совместима с существующими пользователями.netstandard packaging is compatible with existing users.

Можно просмотреть набор профилей PCL, совместимых с .NET Standard:You can see the set of PCL profiles that are compatible with the .NET Standard:

Профиль PCLPCL Profile .NET Standard.NET Standard Платформы PCLPCL Platforms
Profile7Profile7 1.11.1 .NET Framework 4.5, Windows 8.NET Framework 4.5, Windows 8
Profile31Profile31 1,01.0 Windows 8.1, Windows Phone Silverlight 8.1Windows 8.1, Windows Phone Silverlight 8.1
Profile32Profile32 1.21.2 Windows 8.1, Windows Phone 8.1Windows 8.1, Windows Phone 8.1
Profile44Profile44 1.21.2 .NET Framework 4.5.1, Windows 8.1.NET Framework 4.5.1, Windows 8.1
Profile49Profile49 1,01.0 .NET Framework 4.5, Windows Phone Silverlight 8.NET Framework 4.5, Windows Phone Silverlight 8
Profile78Profile78 1,01.0 .NET Framework 4.5, Windows 8, Windows Phone Silverlight 8.NET Framework 4.5, Windows 8, Windows Phone Silverlight 8
Profile84Profile84 1,01.0 Windows Phone 8.1, Windows Phone Silverlight 8.1Windows Phone 8.1, Windows Phone Silverlight 8.1
Profile111Profile111 1.11.1 .NET Framework 4.5, Windows 8, Windows Phone 8.1.NET Framework 4.5, Windows 8, Windows Phone 8.1
Profile151Profile151 1.21.2 .NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1.NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1
Profile157Profile157 1,01.0 Windows 8.1, Windows Phone 8.1, Windows Phone Silverlight 8.1Windows 8.1, Windows Phone 8.1, Windows Phone Silverlight 8.1
Profile259Profile259 1,01.0 .NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8.NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8

Нацеливание на .NET StandardTargeting .NET Standard

Вы можете создавать библиотеки .NET Standard с помощью сочетания платформы netstandard и метапакета NETStandard.Library.You can build .NET Standard Libraries using a combination of the netstandard framework and the NETStandard.Library metapackage. Вы можете ознакомиться с примерами нацеливания на .NET Standard с помощью средств .NET Core.You can see examples of targeting the .NET Standard with .NET Core tools.

См. такжеSee also

Версии .NET Standard.NET Standard Versions