.Чистый стандарт vs.NET основной


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

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

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

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

6 177

6 ответов:

я постараюсь еще больше прояснить ваши сомнения и расширить ответ Джона Скита.

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

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

эта упрощенная схема может помочь понять эту связь:

NET Standard Interfaces analogy

что-нибудь целевое NetCore10 имеет доступ к INetStandard15 APIs иNetCore10конкретные API (например,DotNetHostPolicy).

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

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

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

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

поэтому, если вы создадите библиотеку .NET Core, она будет иметь доступ к вещам, которые реализованы в .NET Core, но не часть стандарта .NET, и ваша библиотека не будет совместима с другое реализации стандарта .NET, такие как Xamarin, Tizen, полная платформа рабочего стола .NET и т. д.

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

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

поэтому, если вы уверены, что вы будете использовать вашу библиотеку только для .Объем основных проектов, можно игнорировать .Сетка стандартная, но если есть даже крохотный шанс, что ваш код будет использоваться .Net или моно тогда в Xamarin лучше придерживаться .Чистый стандарт

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

PS: также, если вы хотите конвертировать вас библиотека для .NET Standard, .NET Portability Analyzer может помочь вам в этом.

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

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


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

вы имели в виду .NET Framework? Потому что .NET standard-это реализации, такие как .NET Framework, .NET Core и Xamarin.

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

на среда разработки перспективных, .Net core является легким. Таким образом, Вы можете использовать VSCode, Sublime, для IDE (не только visual studio).

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

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