Не так давно в сети появился пост Immo Landwerth, который рассказывает о .NET Standard 2.0
Если вкратце, то это унификация .NET для следующих веток .NET Framework, .NET Core и Xamarin. Выражаясь понятными словами это набор API, который будет реализован всеми платформами.
И сразу значительное изменение: .NET Standard заменит библиотеки PCL. Хотя для разработчиков суть и останется прежняя, реализация будет другой. Ездить машина будет, как и раньше, но изменится название и содержимое под капотом (пожалуй, в лучшую сторону).
В .NET Standard будут API, которые обязательно необходимо реализовать всем платформам, и будут API, реализация которых не обязательна – опциональные. Не обязательные будут доступны в виде отдельных пакетов NuGet.
Что не может быть реализовано всеми платформами можно разделить на две группы: API специфические для каждого runtime и API специфические для каждой OS. Как можно поступить с нереализуемыми API:
- Сделать API недоступным
- Сделать API доступным, но выбрасывать PlatformNotSupportedException на тех платформах, на которых нет реализации
- Имитировать API (как это делает Mono, частично имитируя реестр в виде .ini файлов)
.NET Standard использует все эти варианты и их комбинации, в зависимости от ситуации. Технологии, которые будут доступны только на определенных платформах, будут реализованы в виде пакетов NuGet. Если невозможно сделать автономный пакет, то возникают варианты: выбросить исключение или имитировать API.
Есть множество версий .NET Standard, которые совместимы с различными платформами:
Как вы можете заметить, версия фреймворка 4.6.1 встречается дважды (это не опечатка). Именно с ней будет совместим .NET Standard 2.0, а также следующие версии Xamarin и .NET Core. Произошел откат изменений, которые были сделаны в версиях 1.5 и 1.6. Почему это было сделано? Для поддержки обратной совместимости. Более новые версии .NET Standard должны содержать в себе предыдущие, плюс новые возможности. В ходе анализа NuGet.org было найдено только 6 пакетов с целевой платформой .NET Standard 1.5 и выше, автором которых является не Microsoft, поэтому решили взять за основу 4.6.1, а авторам этих 6-ти пакетов предложить их обновить.
.NET Standard хоть и заменяет PCL, но все еще поддерживает работу с ними. Из библиотеки .NET Standard вы сможете делать ссылку на другую библиотеку .NET Standard или же на библиотеку PCL
Кроме того, есть возможность сделать ссылку на обычную библиотеку .NET с помощью прокладки совместимости (compatibility shim).
Но не спешите особо радоваться. Работать будет только в случае, если в этой .NET библиотеке все API поддерживаются .NET Standard. Зато так будет гораздо проще подключить ссылки на уже существующие библиотеки.
На следующем изображении показаны основные API .NET Standard 2.0
Можно увидеть какие возможности, скорее всего, появятся у .NET Core (сейчас у этой ветки меньше всего возможностей). Что касается Xamarin, то многие из этих API уже были включены в стабильный релиз Cycle 8/Mono 4.6.0
Если хотите взглянуть на набор специфичных API, то можете взглянуть на репозиторий .NET Standard на GitHub.
Подробнее читайте в оригинальной статье: Introducing .NET Standard
Поделиться с друзьями
Комментарии (24)
pogorzhelskiy
11.10.2016 11:58+22Голосую за .net core, та что в красном. Статью не читал, вероятно она полезная.
BubaVV
11.10.2016 12:48-2Ассемблерgeekmetwice
12.10.2016 01:14-8Правильно ли я понял, что только спустя 14 лет в MS схватились за голову и поняли всю суть Жавы? Она ж и есть «ядро»+«стандартные либы». Часы, смарт, ПК — везде работает простая VM. А уже в зависимости от устройства, к программе цепляют нужные либы и всё работает.
Ох, как же непросто будет теперь MS перелопачивать свой 14-летний навоз! А главное — одна из важнейших сфер, GUI, до сих пор не имеет портируемой версии. Без неё все их потуги — пшик.
JustTry
12.10.2016 10:22+2А будет ли более подробное рассмотрение .NET Core? (Желательно побольше графики)
kamushken
мне ту, что слева!
AzureSeraphim
Мне ту что справа, не люблю кости.
midday
Все норм, но главное чтобы функциональна была, а не как бесполезное бревно.
Kenya-West
Причем это же требование подходит и к разработке! ( ?° ?? ?°)
MAXHO
Вы не заметили главного… Какой бы .NET Вы бы не выбрали, Frontend одинаково страшен
sidristij
Ну как же, мы же видим душу, как они и хотят