.NET Standard vs .NET Core

Я прочитал о различии между .NET Standard и .NET Core, но я действительно не знаю, в чем разница, или когда выбрать проект библиотеки .NET Standard и когда выбрать проект библиотеки .NET Core.

Я прочитал, что .NET Standard гарантирует, что набор API всегда доступен, независимо от используемой платформы (если эта платформа совместима с выбранной мной стандартной версией .NET). Если я не ошибаюсь, это значит, что я могу создать библиотеку классов .NET Standard, а затем использовать ее на любой платформе, совместимой со стандартной версией .NET, которую я выбрал.

С .NET Core я прочитал, что он также предназначен для межплатформенного использования, поэтому, если я выберу библиотеку .NET Core, кажется, что я могу использовать его и на многих платформах, как и .NET Standard.

Итак, в конце я не вижу разницы. Когда я должен использовать это? В чем разница между ними?

Ответ 1

Я попытаюсь прояснить ваши сомнения и продлить ответ Jon Skeet.

Стандарт .NET - это спецификация, поэтому библиотека, скомпилированная для конкретной версии .NET Standard, может использоваться в различных реализациях .NET Standard.

Как сказано в моем другом комментарии, хорошая аналогия для отношения между .NET Standard и другими стандартными реализациями .NET(.NET Core,.NET Framework и т.д.) является это Дэвид Фаулер: Стандартные версии .NET: Interfaces, а фреймворки - это реализации этих интерфейсов.

Эта упрощенная диаграмма может помочь понять это соотношение:

Стандартная стандартная интерфейсная совместимость

Любая цель NetCore10 имеет доступ к API INetStandard15 и NetCore10 определенным API (например, DotNetHostPolicy).

Конечно, эта библиотека не может использоваться в разных реализациях INetStandard15 (NetCore10 не конвертируется в NetFramework462 или Mono46).

Если вам требуется доступ только к INetStandard15 API (и предназначаться для этой спецификации вместо конкретной структуры), ваша библиотека может использоваться любая инфраструктура, которая ее реализует (NetCore10, NetFramework462 и т.д.)

Примечание: в оригинальной аналогии Дэвид Фаулер использовал интерфейсы для версий .NET Standard и реализации фреймворков. Я считаю, что использование интерфейсов и классов вместо этого более интуитивно и лучше отражает взаимосвязь между спецификациями и конкретными реализациями.

Ответ 2

.NET Core - это реализация .NET Standard. Он доступен в нескольких операционных системах, но это не то же самое - есть и другие реализации .NET Standard.

Итак, если вы создаете библиотеку .NET Core, у нее будет доступ к вещам, которые реализованы в .NET Core, но не являются частью .NET Standard, и ваша библиотека не будет совместима с другими реализациями .NET Standard, такие как Xamarin, Tizen, полная среда .NET для настольных ПК и т.д.

Короче: для достижения максимальной переносимости сделайте свою библиотеку целевой .NET Standard.

Ответ 3

Библиотека .NET Core Class - это, по сути, подмножество библиотеки .NET Framework, которая содержит меньше API. Придерживаясь библиотеки .NET Core Class, сложно делиться кодом между средами выполнения. Этот код может не работать для другой среды выполнения (Mono для Xamarin), потому что у него нет нужного API. Для решения этой проблемы существует .NET Standard, который представляет собой просто набор спецификаций, которые сообщают вам, какие API вы можете использовать. Основная цель .NET Standard - делиться кодом между средами выполнения. И важно, чтобы эта спецификация была реализована во всех средах выполнения. (.NET Framework, .NET Core и Mono для Xamarin).

Поэтому, если вы уверены, что будете использовать свою библиотеку только для проектов .NET Core, вы можете проигнорировать .NET Standard, но если есть даже небольшая вероятность того, что ваш код будет использоваться .NET Framework или Mono для Xamarin, то лучше придерживаться .NET Standard

Также обратите внимание, что более высокие версии .NET Standard содержат больше API, но более низкие версии поддерживаются большим количеством платформ. Поэтому, если вы создаете стандартную библиотеку .NET, которую вы хотите использовать совместно между средами выполнения, выберите целевую версию, которую вы можете использовать, что поможет вам достичь большинства платформ. Например, если вы хотите работать в .NET Framework 4.5 и .NET Core 1.0, самая высокая версия .NET Standard, которую вы можете использовать, - это .NET Standard 1.1. Обратитесь к этой великолепной таблице из документации для получения дополнительной информации об этом.

PS: Также, если вы хотите преобразовать вашу библиотеку в .NET Standard, вам поможет .NET Portability Analyzer.

Ответ 4

Стандарт .NET - это спецификация API, которую должны предоставить все реализации .NET. Это обеспечивает соответствие семейства .NET и позволяет создавать библиотеки, которые вы можете использовать с любого .NET. реализация. Он заменяет PCL для создания общих компонентов.

.NET Core - это реализация .NET Standard, оптимизированная для создания консольных приложений, веб-приложений и облачных вычислений с использованием ASP.NET Core. Его SDK поставляется с мощным инструментом что в дополнение к разработке Visual Studio поддерживается полная команда линейный процесс разработки. Вы можете узнать больше о них в aka.ms/netstandardfaq и aka.ms/netcore.


Вышеописанное, а также очень четкое объяснение большей части материала, обсуждаемого в этом вопросе, можно найти в следующей чрезвычайно полезной статье Microsoft (MSDN - сентябрь 2017 г.): .NET Standard - Демистификация .NET Core и .NET Standard

Ответ 5

Проще говоря, стандарт .NET используется для написания проектов библиотек классов, которые компилируются в dll..NET Core можно использовать для разработки реальных веб-приложений, которые могут работать во всех операционных системах (Windows, Linux, MacOS). (В .NET Core 3 Microsoft предоставила функциональность для разработки настольных приложений с использованием WPF, но до сих пор эти приложения не будут кроссплатформенными и будут работать только в системе Windows. В будущем Microsoft может сделать их также кроссплатформенными). Стандарт стандарта .NET Библиотеки/библиотеки могут быть использованы в любом приложении, которое использует .NET(.NET Framework,.NET Core), что означает, что вы можете использовать стандарт .NET как с .NET Framework, так и с .NET core.

Ответ 6

.NET Standard - это спецификация API.NET, предназначенная для использования в реализациях .NET. Это позволяет определить единый набор API BCL для всех реализаций .NET.

.NET Core - одна из таких реализаций .NET Standard. .NET Framework - это еще одна реализация стандарта .NET.

Изображение из .NET Blog

enter image description here

Ответ Federicos дает вам графическое представление о том, как каждая структура развивается с версиями. Посмотрите на диаграмму ниже из Документов Microsoft.

enter image description here

Ориентация на.NET Standard повышает поддержку вашей платформы, тогда как ориентация на конкретную платформу .NET, такую как .NET Core (или .NET Framework), позволит вам использовать все функции платформы для этой платформы.

Ответ 7

Вы имели в виду .NET Framework? Потому что .NET стандарт представляет собой реализации, такие как .NET Framework,.NET Core и Xamarin.

Я люблю .NET Core, потому что мы можем разместить его в Linux (используйте nginx в моем опыте). Это отличается от .NET Framework, который вы можете разместить только на IIS. В этом случае вы можете подумать о бюджете хостинга (потому что Windows Server для меня дорог).

С точки зрения среды разработки, ядро .Net легкое. Таким образом, вы можете использовать VSCode, Sublime, для IDE (не только Visual Studio).

Ответ 8

В .NET Core нет графических интерфейсов. Windows Forms и WPF ограничены платформами Microsoft Windows.

Если вам нужны или нужны кросс-платформенные графические приложения, вам нужен графический интерфейс GTK. Это выполняется под Linux и Windows. Вы можете сделать это, используя MonoDevelop. Единственное различие в настоящее время к этому старому подходу состоит в том, что они не являются версиями позади.