.NET Standard.NET Standard

.NET Standard — это официальная спецификация для API .NET, которые должны быть доступны во всех реализациях .NET..NET Standard is a formal specification of .NET APIs that are available on multiple .NET implementations. .NET Standard была создана для того, чтобы повысить согласованность в экосистеме .NET.The motivation behind .NET Standard was to establish greater uniformity in the .NET ecosystem. Тем не менее в .NET 5 реализован другой подход к обеспечению единообразия, в рамках которого во многих сценариях отсутствует необходимость использовать .NET Standard.However, .NET 5 adopts a different approach to establishing uniformity, and this new approach eliminates the need for .NET Standard in many scenarios. Дополнительные сведения см. в разделе .NET 5 и .NET Standard этой статьи.For more information, see .NET 5 and .NET Standard later in this article.

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

Различные реализации .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, .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 5.0 — .NET Standard 2.1.Similarly, .NET Framework 4.6.1 implements .NET Standard 1.4, while .NET 5.0 implements .NET Standard 2.1.

В следующей таблице перечислены минимальные версии реализаций, которые поддерживают каждую версию .NET Standard.The following table lists the minimum implementation versions that support each .NET Standard version. Это означает, что более поздние версии перечисленных реализаций также поддерживают соответствующую версию .NET Standard.That means that later versions of a listed implementation also support the corresponding .NET Standard version. Например, .NET Core 2.1 и более поздних версий поддерживает .NET Standard 2.0 и более ранних версий.For example, .NET Core 2.1 and later versions support .NET Standard 2.0 and earlier versions.

.NET Standard.NET Standard 1.01.0 1.11.1 1.21.2 1.31.3 1.41.4 1.51.5 1.61.6 2.02.0 2.12.1
.NET Core и .NET 5.NET Core and .NET 5 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 2.02.0 3.03.0
.NET Framework 1.NET Framework 1 4.54.5 4.54.5 4.5.14.5.1 4.64.6 4.6.14.6.1 4.6.124.6.1 2 4.6.124.6.1 2 4.6.124.6.1 2 N/A3N/A3
MonoMono 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 5,45.4 6.46.4
Xamarin.iOSXamarin.iOS 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.1410.14 12.1612.16
Xamarin.MacXamarin.Mac 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.83.8 5.165.16
Xamarin.AndroidXamarin.Android 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 8.08.0 10.010.0
Универсальная платформа WindowsUniversal Windows Platform 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.0.1629910.0.16299 10.0.1629910.0.16299 10.0.1629910.0.16299 TBDTBD
UnityUnity 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 TBDTBD

1 Перечисленные версии для .NET Framework применимы к пакету SDK для .NET Core 2.0 и инструментарию более поздних версий. В предыдущих версиях использовалось другое сопоставление для .NET Standard 1.5 и более поздних версий. Если вы не можете обновить Visual Studio до версии 2017 и выше, можно скачать инструментарий для средств .NET Core для Visual Studio 2015.1 The versions listed for .NET Framework apply to .NET Core 2.0 SDK and later versions of the tooling. Older versions used a different mapping for .NET Standard 1.5 and higher. You can download tooling for .NET Core tools for Visual Studio 2015 if you cannot upgrade to Visual Studio 2017 or a later version.

2. Перечисленные здесь версии соответствуют правилам, которые NuGet использует для определения применимости указанной библиотеки .NET Standard. Хотя NuGet считает, что .NET Framework 4.6.1 поддерживает .NET Standard с версии 1.5 до 2.0, существует ряд проблем с использованием библиотек .NET Standard, созданных для этих версий из проектов .NET Framework 4.6.1. Для проектов .NET Framework, которым нужно использовать такие библиотеки, рекомендуем обновить проект и использовать в качестве целевой версию .NET Framework 4.7.2 или выше.2 The versions listed here represent the rules that NuGet uses to determine whether a given .NET Standard library is applicable. While NuGet considers .NET Framework 4.6.1 as supporting .NET Standard 1.5 through 2.0, there are several issues with consuming .NET Standard libraries that were built for those versions from .NET Framework 4.6.1 projects. For .NET Framework projects that need to use such libraries, we recommend that you upgrade the project to target .NET Framework 4.7.2 or higher.

3 .NET Framework на поддерживает .NET Standard 2.1. Дополнительные сведения см. в объявлении .NET Standard 2.1.3 .NET Framework doesn't support .NET Standard 2.1. For more information, see the announcement of .NET Standard 2.1.

  • Столбцы представляют версии .NET Standard.The columns represent .NET Standard versions. Каждая ячейка заголовка содержит ссылку на документ, который показывает, какие интерфейсы API добавлены в соответствующей версии .NET Standard.Each header cell is a link to a document that shows which APIs got added in that version of .NET Standard.
  • Строки представляют различные реализации .NET.The rows represent the different .NET implementations.
  • Номер версии в каждой ячейке обозначает минимальную версию реализации, которая потребуется для работы с соответствующей версией .NET Standard.The version number in each cell indicates the minimum version of the implementation you'll need in order to target that .NET Standard version.
  • На сайте Версии .NET Standard доступна интерактивная таблица.For an interactive table, see .NET Standard versions.

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

  1. Найдите строку, которая соответствует вашей реализации .NET.Find the row that indicates 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, которую поддерживает ваша целевая платформа.The column header indicates the .NET Standard version that your target supports. Соответственно, поддерживаются и все более ранние версии .NET Standard.You may also target any lower .NET Standard version. Более поздние версии .NET Standard также будет поддерживать текущую реализацию.Higher .NET Standard versions will also support your implementation.
  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.8 и .NET 5.0, наивысшей доступной версией .NET Standard будет .NET Standard 2.0.For example, if you want to run on .NET Framework 4.8 and .NET 5.0, the highest .NET Standard version you can use is .NET Standard 2.0.

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

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

  • Чем выше версия, тем больше вам доступно интерфейсов API для библиотеки кода.The higher the version, the more APIs are available to your library's code.
  • Чем ниже версия, тем больше приложений и библиотек смогут использовать вашу библиотеку.The lower the version, the more apps and libraries can use your library.

Мы рекомендуем выбирать наименьшую из возможных версий .NET Standard.We recommend you 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 предоставляются различные возможности для поддержки зависимостей.However, targeting lower .NET Standard versions introduces a number of support dependencies. Если проект предназначен для .NET Standard 1.x, мы рекомендуем вам также выбрать .NET Standard 2.0.If your project targets .NET Standard 1.x, we recommend that you also target .NET Standard 2.0. Это упростит схему зависимостей для пользователей библиотеки, выполняющейся на совместимых реализациях с .NET Standard 2.0, и сократит количество пакетов, которые необходимо скачать.This simplifies the dependency graph for users of your library that run on .NET Standard 2.0 compatible implementations, and it reduces the number of packages they need to download.

Правила управления версиями .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.
  • Неизменяемость. Версии .NET после выпуска закрепляются в определенном состоянии.Immutable: Once shipped, .NET Standard versions are frozen.

После .NET Standard 2.1 выпуск новых версий не планируется.There will be no new .NET Standard versions after 2.1. Дополнительные сведения см. в разделе .NET 5 и .NET Standard этой статьи.For more information, see .NET 5 and .NET Standard later in this article.

Спецификация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.

Официальные артефакты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 are delivered in a variety of ways, appropriate for each .NET implementation.

Пакеты NuGet нацелены на одну или несколько платформ.NuGet packages target one or more frameworks. Пакеты библиотеки .NET Standard нацелены на платформу ".NET Standard"..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). Библиотеки, предназначенные для различных реализаций .NET, должны быть нацелены на эту платформу.Libraries that are intended to run on multiple implementations of .NET should target this framework. Для самого широкого набора API-интерфейсов выберите netstandard2.0, так как количество доступных API-интерфейсов увеличилось более чем вдвое между версиями .NET Standard 1.6 и 2.0.For the broadest set of APIs, target netstandard2.0 since the number of available APIs more than doubled between .NET Standard 1.6 and 2.0.

Метапакет 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 a 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 implementations.

Как отмечалось ранее, после .NET Standard 2.1 выпуск новых версий не планируется.As noted earlier, there will be no new .NET Standard versions after 2.1.

Нацеливание на .NET StandardTarget .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 Framework.NET Framework compatibility mode

Начиная с .NET Standard 2.0, доступен режим совместимости .NET Framework.Starting with .NET Standard 2.0, the .NET Framework compatibility mode was introduced. Этот режим совместимости позволяет проектам .NET Standard ссылаться на библиотеки .NET Framework, как если бы они были скомпилированы для .NET Standard.This compatibility mode allows .NET Standard projects to reference .NET Framework libraries as if they were compiled for .NET Standard. Создание ссылок на библиотеки .NET Framework не работает для всех проектов, например таких, где библиотека использует API Windows Presentation Foundation (WPF).Referencing .NET Framework libraries doesn't work for all projects, such as libraries that use Windows Presentation Foundation (WPF) APIs.

Дополнительные сведения см. в разделе Режим совместимости .NET Framework.For more information, see .NET Framework compatibility mode.

Библиотеки .NET Standard и Visual Studio.NET Standard libraries and Visual Studio

Чтобы создавать библиотеки .NET Standard в Visual Studio, убедитесь, что у вас установлена Visual Studio 2019, или Visual Studio 2017 версии 15.3 или более поздней (для Windows), или Visual Studio для Mac версии 7.1 или более поздней (для macOS).In order to build .NET Standard libraries in Visual Studio, make sure you have Visual Studio 2019 or Visual Studio 2017 version 15.3 or later installed on Windows, or Visual Studio for Mac version 7.1 or later installed on macOS.

Если вам нужно использовать только библиотеки .NET Standard 2.0 в своих проектах, это также можно сделать в Visual Studio 2015.If you only need to consume .NET Standard 2.0 libraries in your projects, you can also do that in Visual Studio 2015. Но у вас должен быть установлен клиент NuGet версии 3.6 или более поздней.However, you need NuGet client 3.6 or higher installed. Можно скачать клиент NuGet для Visual Studio 2015 со страницы загрузок NuGet.You can download the NuGet client for Visual Studio 2015 from the NuGet downloads page.

.NET 5 и .NET Standard.NET 5 and .NET Standard

.NET 5 — это реализация .NET, которая активно разрабатывается корпорацией Майкрософт..NET 5 is the implementation of .NET that Microsoft is actively developing. Это отдельный продукт с единым набором возможностей и API, которые можно использовать для разработки классических приложений Windows, а также кроссплатформенных консольных приложений, облачных служб и веб-сайтов.It's a single product with a uniform set of capabilities and APIs that can be used for Windows desktop apps and cross-platform console apps, cloud services, and websites. Столь широкий спектр сценариев применения отражается с помощью моникеров целевой платформы (TFM) .NET 5.0:The .NET 5.0 TFMs reflect this broad range of scenarios:

  • net5.0

    Этот TFM предназначен для кода, который может выполняться везде.This TFM is for code that runs everywhere. За некоторыми исключениями он включает только кроссплатформенные технологии.With a few exceptions, it includes only technologies that work cross-platform. Для кода .NET 5 net5.0 заменяет моникеры целевой платформы netcoreapp и netstandard.For .NET 5 code, net5.0 replaces both netcoreapp and netstandard TFMs.

  • net5.0-windows

    Это пример моникеров целевой платформы для конкретной ОС, которые добавляют функции соответствующей ОС в любые компоненты, на которые ссылается net5.0.This is an example of OS-specific TFMs that add OS-specific functionality to everything that net5.0 refers to.

Выбор целевой платформы net5.0 или netstandardWhen to target net5.0 vs. netstandard

Для существующего кода, который предназначен для netstandard, нет необходимости изменять TFM на net5.0.For existing code that targets netstandard, there's no need to change the TFM to net5.0. .NET 5.0 реализует .NET Standard 2.1 и более ранних версий..NET 5.0 implements .NET Standard 2.1 and earlier. Единственная причина для изменения целевой платформы с .NET Standard на .NET 5.0 состоит в том, чтобы получить доступ к большему количеству функций среды выполнения, языков или API.The only reason to retarget from .NET Standard to .NET 5.0 would be to gain access to more runtime features, language features, or APIs. Например, чтобы использовать C# 9, необходимо указывать в качестве целевой платформы .NET 5.0.For example, in order to use C# 9, you need to target .NET 5.0. Вы можете указывать несколько целевых платформ (.NET 5.0 и .NET Standard), чтобы иметь возможность использовать самые новые функции и при этом по-прежнему обеспечивать доступность вашей библиотеки для других реализаций .NET.You can multitarget .NET 5.0 and .NET Standard to get access to newer features and still have your library available to other .NET implementations.

Ниже приводятся некоторые рекомендации в отношении нового кода для .NET 5:Here are some guidelines for new code for .NET 5:

  • Компоненты приложенияApp components

    Если вы используете библиотеки для разбиения приложения на несколько компонентов, рекомендуется указывать целевую платформу net5.x, где 5.x определяет самую раннюю версию .NET 5, для которой может быть предназначено приложение.If you're using libraries to break down an application into several components, we recommend you target net5.x where 5.x is the earliest .NET 5 version that your application can target. Для простоты рекомендуется использовать для всех проектов, входящих в состав приложения, одну версию .NET.For simplicity, it's best to keep all projects that make up your application on the same version of .NET. Впоследствии вы можете полагать, что везде используются одни и те же функции библиотеки базовых классов.Then you can assume the same BCL features everywhere.

  • Повторно используемые библиотекиReusable libraries

    Если вы создаете повторно используемые библиотеки, которые планируется поставлять в составе пакетов NuGet, следует выбирать оптимальное сочетание широты охвата и доступного набора функций.If you're building reusable libraries that you plan to ship on NuGet, consider the trade-off between reach and available feature set. Последней версией, которую поддерживает .NET Framework, является .NET Standard 2.0, благодаря чему обеспечивается необходимая широта охвата платформ и достаточно полный набор доступных функций..NET Standard 2.0 is the latest version that is supported by .NET Framework, so it gives good reach with a fairly large feature set. Мы не рекомендуем указывать в качестве целевой платформы .NET Standard 1.x, так как в этом случае вы ограничиваете набор доступных функций при минимальном увеличении широты охвата.We don't recommend targeting .NET Standard 1.x, as you'd limit the available feature set for a minimal increase in reach.

    Если вам не требуется поддержка .NET Framework, вы можете использовать .NET Standard 2.1 или .NET 5.If you don't need to support .NET Framework, you could go with .NET Standard 2.1 or .NET 5. Мы рекомендуем пропустить .NET Standard 2.1 и перейти непосредственно к .NET 5.We recommend you skip .NET Standard 2.1 and go straight to .NET 5. Большинство широко распространенных библиотек предназначены одновременно для .NET Standard 2.0 и .NET 5.Most widely used libraries will end up multi-targeting for both .NET Standard 2.0 and .NET 5. Поддержка .NET Standard 2.0 обеспечивает максимальную широту охвата, в то время как поддержка .NET 5 позволяет использовать новейшие функции платформы для клиентов, которые уже работают с .NET 5.Supporting .NET Standard 2.0 gives you the most reach, while supporting .NET 5 ensures you can leverage the latest platform features for customers that are already on .NET 5.

Проблемы, связанные с .NET Standard.NET Standard problems

В этом разделе описываются некоторые связанные с .NET Standard проблемы, которые позволяют понять, почему .NET 5 является предпочтительной платформой для совместного использования кода между разными платформами и рабочими нагрузками:Here are some problems with .NET Standard that help explain why .NET 5 is the better way to share code across platforms and workloads:

  • Задержки с добавлением новых APISlowness to add new APIs

    Платформа .NET Standard была создана как набор API, который должен поддерживать все реализации .NET, поэтому был определен процесс проверки предложений по добавлению новых API..NET Standard was created as an API set that all .NET implementations would have to support, so there was a review process for proposals to add new APIs. Цель заключалась в том, чтобы стандартизировать только те API, которые могут быть реализованы на всех текущих и будущих платформах .NET.The goal was to standardize only APIs that could be implemented in all current and future .NET platforms. В результате, если был пропущен определенный выпуск функции, на ее добавление в версию Standard может уйти несколько лет.The result was that if a feature missed a particular release, you might have to wait for a couple of years before it got added to a version of the Standard. При этом ожидание того, что новая версия .NET Standard получит всеобщую поддержку, может длиться еще дольше.Then you'd wait even longer for the new version of .NET Standard to be widely supported.

    Решение в .NET 5: Благодаря использованию общей базы кода после реализации функция будет сразу же доступна всем приложениям и библиотекам .NET 5.Solution in .NET 5: When a feature is implemented, it's already available for every .NET 5 app and library because the code base is shared. А поскольку различия между спецификацией API и его реализацией отсутствуют, вы можете воспользоваться преимуществами новых функций гораздо быстрее, чем в случае с .NET Standard.And since there's no difference between the API specification and its implementation, you're able to take advantage of new features much quicker than with .NET Standard.

  • Сложная система управления версиямиComplex versioning

    Разделение спецификации API и его реализации приводит к сложному сопоставлению между версиями спецификаций API и их реализаций.The separation of the API specification from its implementations results in complex mapping between API specification versions and implementation versions. Эта видно из приведенной ранее в этой статье таблицы и инструкций по ее интерпретации.This complexity is evident in the table shown earlier in this article and the instructions for how to interpret it.

    Решение в .NET 5: В .NET 5.x отсутствует разделение между спецификацией и реализацией API.Solution in .NET 5: There's no separation between a .NET 5.x API specification and its implementation. Это позволяет получить упрощенную схему моникеров целевой платформы.The result is a simplified TFM scheme. Для всех рабочих нагрузок (библиотеки, консольные приложения и веб-приложения) используется один префикс моникера целевой платформы: net5.0.There's one TFM prefix for all workloads: net5.0 is used for libraries, console apps, and web apps. Изменения касаются только суффикса, который определяет API, предназначенные для конкретной платформы, например net5.0-windows.The only variation is a suffix that specifies platform-specific APIs for a particular platform, such as net5.0-windows. Благодаря этому соглашению об именовании TFM можно легко определить, способно ли данное приложение использовать указанную библиотеку.Thanks to this TFM naming convention, you can easily tell whether a given app can use a given library. При этом не требуется использовать какую-либо таблицу эквивалентности номеров версий, как в случае с .NET Standard.No version number equivalents table like the one for .NET Standard is needed.

  • Не поддерживаемые платформой исключения во время выполненияPlatform-unsupported exceptions at run time

    .NET Standard предоставляет интерфейсы API для конкретных платформ..NET Standard exposes platform-specific APIs. При этом ваш код может компилироваться без ошибок и выглядеть доступным для переноса на любую платформу, в то время как на самом деле это не так.Your code might compile without errors and appear to be portable to any platform even if it isn't portable. При запуске на платформе, на которой отсутствует реализация для данного API, во время выполнения будут возникать ошибки.When it runs on a platform that doesn't have an implementation for a given API, you get run-time errors.

    Решение в .NET 5: Пакет SDK для .NET 5 включает анализаторы кода, которые по умолчанию включены.Solution in .NET 5: The .NET 5 SDK includes code analyzers that are enabled by default. Анализатор совместимости платформ обнаруживает непреднамеренное использование API, которые не поддерживаются на платформах, на которых предполагается работать.The platform compatibility analyzer detects unintentional use of APIs that aren't supported on the platforms you intend to run on. Дополнительные сведения см.в разделе Анализатор совместимости платформ.For more information, see Platform compatibility analyzer.

Платформа .NET Standard не является устаревшей.NET Standard not deprecated

.NET Standard по-прежнему требуется для библиотек, которые могут использоваться несколькими реализациями .NET..NET Standard is still needed for libraries that can be used by multiple .NET implementations. Указывать в качестве целевой платформы .NET Standard рекомендуется в следующих сценариях:We recommend you target .NET Standard in the following scenarios:

  • Используйте netstandard2.0 для совместного использования кода между .NET Framework и другими реализациями .NET.Use netstandard2.0 to share code between .NET Framework and all other implementations of .NET.
  • Используйте netstandard2.1 для совместного использования кода между Mono, Xamarin и .NET Core 3.x.Use netstandard2.1 to share code between Mono, Xamarin, and .NET Core 3.x.

См. также разделSee also