Я читал о разнице между .NET Standard и .NET Core, но я действительно не знаю, в чем разница, или когда выбирать проект библиотеки .NET Standard, и когда выбирать проект библиотеки .NET Core.
Я прочитал, что .NET Standard гарантирует, что набор API всегда доступен, независимо от используемой платформы (при условии, что эта платформа совместима с выбранной мною версией .NET Standard). Если я не ошибаюсь, это означает, что я могу создать библиотеку классов .NET Standard и затем использовать ее на любой платформе, совместимой с выбранной версией .NET Standard.
С .NET Core я прочитал, что он также предназначен для кроссплатформенного использования, поэтому, если я выберу библиотеку .NET Core, мне кажется, что я могу использовать ее и на многих платформах, точно так же как .NET Standard.
Так что в конце я не вижу разницы. Когда я должен использовать что? В чем разница между ними?
источник
Ответы:
Я постараюсь уточнить ваши сомнения и расширить ответ Джона Скита.
.NET Standard - это спецификация , поэтому библиотека, скомпилированная для конкретной версии .NET Standard, может использоваться в различных реализациях .NET Standard.
Как сказано в моем другом комментарии, Дэвид Фаулер (David Fowler) предлагает хорошую аналогию для отношений между .NET Standard и другими реализациями .NET Standard (.NET Core, .NET Framework и т. Д.) : Есть версии .NET Standard
Interfaces
, а фреймворки - реализации этих интерфейсов.Эта упрощенная схема может помочь понять эту связь:
Все, что предназначено,
NetCore10
имеет доступ кINetStandard15
API иNetCore10
определенным API (таким какDotNetHostPolicy
).Конечно, эта библиотека не может использоваться в разных
INetStandard15
реализациях (NetCore10
не конвертируется вNetFramework462
илиMono46
).Если вместо этого вам нужен доступ только к
INetStandard15
API (и нацеленность на эту спецификацию вместо конкретной платформы), ваша библиотека может использоваться любой платформой, которая ее реализует (NetCore10
,NetFramework462
и т. Д.)Примечание: в оригинальной аналогии Дэвид Фаулер использовал интерфейсы как для версий .NET Standard, так и для реализаций фреймворков. Я считаю, что использование интерфейсов и классов, напротив, более интуитивно понятно и лучше отражает связь между спецификациями и конкретными реализациями.
источник
.NET Core - это реализация стандарта .NET. Он доступен в нескольких операционных системах, но это не одно и то же - есть и другие реализации .NET Standard.
Поэтому, если вы создадите библиотеку .NET Core, у нее будет доступ к вещам, которые реализованы в .NET Core, но не являются частью .NET Standard, и ваша библиотека не будет совместима с другими реализациями .NET Standard, такие как Xamarin, Tizen, полноценная платформа .NET для рабочего стола и т. д.
Вкратце: чтобы добиться максимальной переносимости, сделайте вашу библиотеку целевой .NET Standard.
источник
INetStandard16
). .NET Core 1.0 и Mono 4.6 оба реализуютINetStandard16
. Вы не можете конвертировать .Net Core 1.0 в Mono 4.6 (и наоборот), но все, что использует,INetStandard16
будет работать на обоих. (благодарность Дэвиду Фаулеру )Библиотека .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.
источник
.NET Standard - это спецификация .NET API, предназначенная для использования в реализациях .NET. Это позволяет определить единый набор API BCL для всех реализаций .NET.
.NET Core - одна из таких реализаций .NET Standard. .NET Framework - это еще одна реализация стандарта .NET.
Изображение из .NET Blog
Ответ Federicos дает вам графическое представление о том, как каждая структура развивается с версиями. Посмотрите на диаграмму ниже из Документов Microsoft .
источник
Выше, вместе с очень ясным объяснением большинства вещей, обсуждаемых в этом вопросе, можно найти в следующей чрезвычайно полезной статье Microsoft (MSDN - сентябрь 2017 г.): .NET Standard - Демистификация .NET Core и .NET Standard
источник
Вы имели в виду .NET Framework? Потому что .NET стандарт представляет собой реализации, такие как .NET Framework, .NET Core и Xamarin.
Я люблю .NET Core, потому что мы можем разместить его в Linux (используйте nginx в моем опыте). Это отличается от .NET Framework, который вы можете разместить только на IIS. Вы можете рассмотреть вопрос о бюджете хостинга в этом случае (потому что Windows Server дорог для меня).
С точки зрения среды разработки , ядро .Net легкое. Таким образом, вы можете использовать VSCode, Sublime, для IDE (не только Visual Studio).
источник
Проще говоря, стандарт .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.
источник