Какая разница между .NET Core и PCL?

Недавно я писал поддерживаемые платформы для своего PCL, одним из которых является другие PCL. Я был смущен, если моя библиотека (которая предназначена для .NET Framework 4.5 и Windows/Phone 8.1) также может использоваться в проектах .NET Core.

Как я понимаю, PCL позволяют вам делиться кодами на нескольких платформах без перекомпиляции, в то время как .NET Core тоже это делает. Единственное различие заключается в том, что .NET Core нацелен на еще несколько платформ, то есть OS X и Linux, и является открытым исходным кодом.

По сути, я не вижу, как .NET Core отличается от Microsoft ребрендингом PCL и говорит: " ОПЛАТА ВНИМАНИЕ мы начинаем работать с открытым исходным кодом и настраивать таргетинг на платформы, отличные от Windows!"

Итак, в нижней строке есть PCL, совместимые с .NET Core, и наоборот? Какая разница между ними?

Ответы

Ответ 1

Есть прекрасная серия статей об этом, которая помогла мне решить мои вопросы...

https://oren.codes/2015/06/16/demystifying-pcls-net-core-dnx-and-uwp-redux/ https://oren.codes/2015/07/29/targeting-net-core/

.Net Core имеет все свои библиотеки (например, System.IO) в отдельных пакетах NuGet (каждый из них доступен для SDK DNX, UWP и .Net 4.6). Сторонние библиотеки нацелены на dnxcore50 (DNX) или uap10.0 (UWP), если они получают доступ к платформе изначально или полагаются на свои функции. Если они не получают доступ к платформе, а полагаются только на другие пакеты, они должны нацеливаться на dotnet.

dotnet Эффективно означает: я совместим с любой платформой, которая удовлетворяет моим зависимостям (ваша библиотека XYZ "dotnet", которая использует System.Reflection dnxcore5+net45, не может использоваться приложением UWP uap10.0). Это эффективно заканчивает комбинаторный кошмар платформ. Предыдущая целевая комбинация dnxcore5+net45 создала пересечение между библиотеками платформ, и каждое добавление сделало бы ситуацию еще хуже. dotnet с другой стороны не ограничивает библиотеку цели, а вместо этого направляет это ограничение на свои зависимости (где внезапно появятся новые ограничения, такие как знаменитая платформа unicorn).

Поэтому в качестве автора библиотеки вы можете настроить таргетинг dotnet, если вам нужны только другие библиотеки.

Отвечая на ваш вопрос:

  • Ваш PCL совместим с средами типа Net Core, такими как DNX и UWP, если вы добавите целевые dotnet, dnxcore50 или uap10.0 в зависимости от потребности в вашей библиотеке (см. статью Owen для той же базовой совместимости с контракт 259).
  • .Net Core - это нечто большее, чем набор библиотек PCLed. Это новая среда CLR, новая организованная структура (упакованная в небольшие части) и инфраструктура для новых .Net SDK (DNX, UWP и т.д.). Термин ".Net Core" предназначен как для библиотеки базового класса "CoreFx", так и для CLR "CoreCLR". Но настоящие платформы на самом деле являются DNX (командой ASP.Net) и UWP (командой Windows).

Весь этот ответ - мое текущее понимание .Net Core. Это незавершенная работа и, как упоминалось в сообщениях, еще не опубликована.

ПРИМЕЧАНИЕ DEC 2016: Помните, dotnet, поскольку предшественник netstandard1.x изменился в своей концепции, начиная с netstandard2.x (.NET Core 2.0; ~ JUN 2017). Начиная с netstandard2.0 будет существовать один общий контракт (netstandard.dll), который реализуется всеми платформами (.NET Core,.NET Framework, Xamarin, Mono, Unity3D). Этот контракт будет расширяться со временем, и платформа должна либо отказаться от поддержки новейшего стандарта, либо выбросить NotImplementedException, либо реализовать его.

Ответ 2

Я понимаю, что они оба в концепции разные.

  • .NET Portable, основанный на .NET Full,.NET Core, Windows Phone и т.д., как своего рода "мостовой слой".
  • На самом деле нет конкретной реализации, рассмотрим его как "Пакет" сборок "Интерфейсов" (контрактов).
  • Объем пакета .NET Portable "Пакет" динамичен, зависит от того, на каких платформах "Цели" вы собираетесь "моститься". Это пересечение платформ, на которые вы нацеливаетесь, тем больше платформ меньше.
  • Во время выполнения этот переносимый слой подключен/адаптирован к реальной реализации .NET full,.net core или...