Стандарт.NET против.NET Core
Я читал о разнице между.NET Standard и.NET Core, но я действительно не знаю, в чем разница, или когда выбирать проект библиотеки.NET Standard и когда выбирать проект библиотеки.NET Core.
Я прочитал, что.NET Standard гарантирует, что набор API всегда доступен, независимо от используемой платформы (при условии, что эта платформа совместима с выбранной мною версией.NET Standard). Если я не ошибаюсь, это означает, что я могу создать библиотеку классов.NET Standard, а затем использовать ее на любой платформе, совместимой с выбранной версией.NET Standard.
С.NET Core я прочитал, что он также предназначен для кроссплатформенного использования, поэтому, если я выберу библиотеку.NET Core, мне кажется, что я смогу использовать ее и на многих платформах, точно так же как.NET Standard.
Так что в конце я не вижу разницы. Когда я должен использовать что? В чем разница между ними?
6 ответов
Я постараюсь прояснить ваши сомнения и расширить ответ Джона Скита.
.NET Standard - это спецификация, поэтому библиотека, скомпилированная для конкретной версии.NET Standard, может использоваться в различных реализациях.NET Standard.
Как сказано в моем другом комментарии, Дэвид Фаулер (David Fowler) предлагает хорошую аналогию для отношений между.NET Standard и другими реализациями.NET Standard (.NET Core, .NET Framework и т. Д.): 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 Framework для рабочего стола и т. д.
Вкратце: чтобы добиться максимальной переносимости, сделайте вашу библиотеку целевой.NET Standard.
.NET Standard - это спецификация API.NET, предназначенная для использования в реализациях.NET. Это позволяет определить единый набор API BCL для всех реализаций.NET.
.NET Core - одна из таких реализаций.NET Standard..NET Framework - это еще одна реализация стандарта.NET.
Изображение из .NET Blog
Ответ Federicos дает вам графическое представление о том, как каждая структура развивается с версиями. Посмотрите на диаграмму ниже из Документов Microsoft.
Ориентация на.NET Standard повышает поддержку вашей платформы, тогда как ориентация на конкретную платформу.NET, такую как.NET Core (или.NET Framework), позволит вам использовать все функции платформы для этой платформы.
Библиотека.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 стандарт
Также обратите внимание, что более высокая версия.NET Standard содержит больше API, но более низкая версия поддерживается большим количеством платформ. Поэтому, если вы создаете библиотеку.NET Standard, которую вы хотите использовать совместно между средами выполнения, тогда выберите самую низкую версию, какую только сможете, что поможет вам достичь максимального количества платформ. Например, если вы хотите работать в.NET Framework 4.5 и.NET Core 1.0, самая высокая версия.NET Standard, которую вы можете использовать, - это.NET Standard 1.1. Это отличная таблица из документации для получения дополнительной информации об этом.
PS: Также, если вы хотите преобразовать свою библиотеку в.NET Standard, вам поможет.NET Portability Analyzer.
.NET Standard - это спецификация API, которую должны предоставлять все реализации.NET. Он обеспечивает согласованность с семейством.NET и позволяет создавать библиотеки, которые можно использовать из любой реализации.NET. Он заменяет PCL для создания общих компонентов.
.NET Core - это реализация стандарта.NET, оптимизированная для создания консольных приложений, веб-приложений и облачных сервисов с использованием ASP.NET Core. Его SDK поставляется с мощным инструментарием, который в дополнение к разработке Visual Studio поддерживает полный рабочий процесс разработки на основе командной строки. Вы можете узнать о них больше на http://aka.ms/netstandardfaq и http://aka.ms/netcore.
Выше, вместе с очень ясным объяснением большинства вещей, обсуждаемых в этом вопросе, можно найти в следующей чрезвычайно полезной статье Microsoft (MSDN - сентябрь 2017 г.): .NET Standard - Демистификация.NET Core и.NET Standard
Проще говоря, стандарт.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.
Вы имели в виду.NET Framework? Потому что.NET стандарт представляет собой реализации, такие как.NET Framework, .NET Core и Xamarin.
Я люблю.NET Core, потому что мы можем разместить его в Linux (используйте nginx в моем опыте). Это отличается от.NET Framework, который вы можете разместить только на IIS. Вы можете подумать о бюджете хостинга в этом случае (потому что Windows Server дорог для меня).
С точки зрения среды разработки, ядро .Net легкое. Таким образом, вы можете использовать VSCode, Sublime, для IDE (не только Visual Studio).
.NET Core не имеет никаких структур GUI. Windows Forms и WPF ограничены платформами Microsoft Windows.
Если вы хотите или нуждаетесь в кроссплатформенных приложениях с графическим интерфейсом, тогда вам нужен GTK GUI. Это работает под Linux и Windows. Вы можете сделать это с помощью MonoDevelop. Единственное отличие в настоящее время от этого старого подхода состоит в том, что они не являются версиями позади.