В чем разница между пакетом NETStandard.Library и пакетом Microsoft.NETCore.App?

Я хотел знать разницу между двумя пакетами и иметь ли это какое-либо отношение к .NETCore и NETStandard и совместимости. Я нашел это:

Целевая платформа NETStandard — это абстрактная целевая платформа, представляющая поверхность API многих платформ и платформ. Таким образом, сборки NETStandard могут работать на любой платформе, которая поддерживает NETStandard, на который нацелена эта сборка, например: .NET Desktop, Windows Phone, приложения универсальной платформы Windows, приложения .NET Core и т. д. NETCoreApplication — это конкретная целевая платформа, которая представляет собой платформа как с поверхностью API, так и с реализацией. Приложения .NET Core запускаются сами по себе. Библиотеки .NETStandard должны быть опубликованы или использованы конкретной конкретной целевой платформой для использования в приложении этого типа.

на https://masteringalm.github.io/framework/2018/07/24/NetStandardvsNetCoreApp-Project-Types.html Но я не совсем уверен, как использовать это для описания различий между двумя пакетами. Я видел пост по этой ссылке: Какая разница между .NetCoreApp и .NetStandard.Library? Где было сказано:

NetCoreApp — это платформа, а .NetStandard.Library — это библиотека, которая должна быть кросс-платформенной (переносимой библиотекой классов) для различных сред выполнения платформ .NET.

Я думаю, что это связано с различиями между двумя конкретными пакетами, упомянутыми в заголовке вопроса, но может ли кто-нибудь описать различия между пакетами не таким запутанным образом?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
572
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Слишком упрощенно, но думайте о .NET Standard как о библиотеке, которая работает на любой платформе, на которой можно запускать .NET. Это означает, что он может работать на Linux, Mac, Windows и т. д. .NET Core — это минималистичная версия «фреймворка», поэтому вы можете сделать свои приложения как можно меньше и добавлять только то, что вам нужно. Ядро означает только основные функции, которые абсолютно необходимы для запуска приложения.

Почему стандарт и ядро ​​отличаются? Во многом это связано с тем, что функциональность .NET на других платформах была запущена с открытым исходным кодом кем-то другим, а не Microsoft. Таким образом, функции отстают от .NET. Название «фреймворка» .NET на других платформах было Mono. В какой-то момент .NET Core вполне может заменить стандарт, но некоторые вещи должны быть на том же уровне.

Я предполагаю, что некоторые пуристы не согласятся с моим чрезмерным упрощением, но это простой способ разобраться в библиотеках.

Что касается того, что конкретно отличается между ними (или «чего не хватает в стандарте, чтобы быть эквивалентным ядру») - я не уверен. Я уверен, что это можно посмотреть. Во многих случаях я обнаружил, что Core работает нормально, например, при докеризации приложения (да, я использовал слово «докеризация», но это означает, что он работает в контейнере Docker). Проблемы возникают, когда вы запускаете какой-то пакет, который не может быть обработан в «Моно».

Когда дело доходит до пакетов, которые вы добавляете в стандарт или Core (кто-нибудь Nuget?), где есть разница, имеет дело с функциями, которые не могут работать в стандарте.

Ответ принят как подходящий

.net стандарт Каждая реализация управляемой платформы имеет собственный набор библиотек базовых классов. Библиотека базовых классов (BCL) содержит такие классы, как обработка исключений, строки, XML, ввод-вывод, сеть и коллекции. .NET Standard — это спецификация для реализации BCL. Поскольку для соответствия этому стандарту требуется реализация .NET, разработчикам приложений не придется беспокоиться о разных версиях BCL для каждой реализации управляемой среды. Библиотеки классов Framework (FCL), такие как WPF, WCF и ASP.NET, не являются частью BCL и поэтому не включены в .NET Standard. Связь между .NET Standard и реализацией .NET такая же, как между спецификацией HTML и браузером. Второй является реализацией первого. Следовательно, .NET Framework, Xamarin и .NET Core реализуют .NET Standard для BCL в своей управляемой среде. Поскольку компьютерная индустрия будет продолжать внедрять новое оборудование и операционные системы, для .NET появятся новые управляемые платформы. Этот стандарт позволяет разработчикам приложений знать, что существует согласованный набор API, на который они могут положиться. Каждая версия .NET имеет связанную версию .NET Standard.

.NET Core — это бесплатная кроссплатформенная реализация управляемой платформы с открытым исходным кодом. Он поддерживает четыре типа приложений: консоль, ASP.NET Core, облако и универсальную платформу Windows (UWP). Windows Forms и Windows Presentation Foundation (WPF) не являются частью .NET Core. Технически .NET Core поддерживает только консольные приложения. ASP.NET Core и UWP — это модели приложений, построенные на основе .NET Core. В отличие от .NET Framework, .NET Core не считается компонентом Windows. Поэтому обновления приходят в виде пакетов NuGet, а не через Центр обновления Windows. Поскольку среда выполнения .NET Core устанавливается App-Local, а приложения обновляются через диспетчер пакетов, приложения можно связать с определенной версией .NET Core и обновлять по отдельности. Для получения дополнительной информации посетите https://www.infoq.com/news/2017/10/dotnet-core-standard-difference/

Другие вопросы по теме