Страницы

Поиск по вопросам

воскресенье, 31 марта 2019 г.

Объясните на пальцах совместимость библиотек в .Net Core, .Net Framework, .Net Standart

Изучаю .Net. Хочу написать некое серверное приложение (думаю что учеба лучше на реальном примере, нежели писать примитивные hello world). Выбор уходит в сторону .Net Core (микросервис). В проекте нужно будет использовать некоторые библиотеки (далее пример приведу). Из всего прочитанного понял следующее (если что не правильно понял поправьте):
Net Standart - вершина "айсберга" (своего рода типа интерфейс для остальных проектов) Net Core, Net Framework, Xamarin - ниже по иерархии (типа как классы реализующие интерфейс), но могут (и скорее всего так и делают) добавлять свои специфические фичи, характерные для каждого из них. Библиотеки (dll-ки) написанные как классы Net Standart могут использоваться в любом из наследников (Net Core, Net Framework, Xamarin) с полной совместимостью (а если быть точным то смотреть таблицу реализации https://docs.microsoft.com/en-us/dot...tation-support), но не наоборот (т.е. к примеру если библиотека написана как Net Framework dll (со специфическими для Net Framework фичами), то не факт что ее можно использовать в Net Core, потому как он не поддерживает специфические фичи из Net Framework) Каждая последующая версия Net Standart, Net Core, Net Framework, Xamarin включает в себя все фичи из предыдущей версии самой себя + некоторые новые. Т.е. к примеру код написанный под Net Standart 1.3 будет 100% работать в Net Standart 2.0, НО код написанный под Net Standart 2.0 не будет работать в Net Standart 1.3 и выше.
И теперь собственно на реальном примере. Буду использовать .Net Core 2.0 и смотреть совместимость естественно с Net Standart 2.0 и .NETFramework 4.6.1. Выбираю два пакета (библиотеки) на сайте nuget. Первый к примеру Selenium Webdriver https://www.nuget.org/packages/Selenium.WebDriver/ Во вкладке dependencies смотрю что ему надо (я понимаю что все это подтянется автоматом в visual studio, вручную не надо):
.NETFramework 3.5 No dependencies.
.NETFramework 4.0 No dependencies.
.NETFramework 4.5 No dependencies.
.NETStandard 2.0 Newtonsoft.Json (>= 10.0.3)
Как я понимаю ему не нужны никакие зависимости из .NETFramework, но нужна одна зависимость из .NETStandard 2.0. Но для Newtonsoft.Json (>= 10.0.3) тоже нужны зависимости https://www.nuget.org/packages/Newtonsoft.Json/
.NETFramework 2.0 No dependencies.
.NETFramework 3.5 No dependencies.
.NETFramework 4.0 No dependencies.
.NETFramework 4.5 No dependencies.
.NETStandard 1.0 Microsoft.CSharp (>= 4.3.0) NETStandard.Library (>= 1.6.1) System.ComponentModel.TypeConverter (>= 4.3.0) System.Runtime.Serialization.Primitives (>= 4.3.0)
.NETStandard 1.3 Microsoft.CSharp (>= 4.3.0) NETStandard.Library (>= 1.6.1) System.ComponentModel.TypeConverter (>= 4.3.0) System.Runtime.Serialization.Formatters (>= 4.3.0) System.Runtime.Serialization.Primitives (>= 4.3.0) System.Xml.XmlDocument (>= 4.3.0)
.NETStandard 2.0 No dependencies.
Вот тут я немного в ступоре. Если я буду использовать .Net Core 2.0, а он в свою очередь реализует .NETStandard 2.0, то как я понимаю для Newtonsoft.Json уже не нужны зависимости из .NETStandard 1.0 и .NETStandard 1.3, потому как все это уже есть в .NETStandard 2.0.
Т.е. будет ли пакет Selenium.WebDriver совместим с .Net Core в данном случае?
И еще один пример, есть пакет cefSharp: https://www.nuget.org/packages/CefSharp.OffScreen/65.0.0-pre01 Он тянет зависимость CefSharp.Common (= 65.0.0-pre01) Та еще две, но эти последние две не тянут ничего https://www.nuget.org/packages/cef.redist.x64/
This package has no dependencies.
В этом случае ни слова про .NETStandard и .NETFramework. Т.е. как я понимаю они вообще самодостаточные? Т.е. как они будут работать в .Net Core?
Длинный вопрос получился, но надеюсь вы поняли, в чем я хочу разобраться: Как выяснить совместимость пакета с определенной реализацией .NET?


Ответ

Вы немного неправильно читаете раздел "dependencies". Вы читаете его как "поддерживаемые фреймворки, и необходимые части фреймворков". На самом деле это "необходимые дополнительные пакеты, при использовании этого пакета под конкретный фреймворк".
Например:
Как я понимаю ему не нужны никакие зависимости из .NETFramework, но нужна одна зависимость из .NETStandard 2.0.
Это не "одна зависимость из .NETStandard 2.0". Это "другие nuget-пакеты, которые нужны для использования версии Selenium.WebDriver, собранной под .NETStandard 2.0.".
Если ваше приложение собирается под .NETFramework 4.5 - вы можете подключить пакет Selenium.WebDriver, и код из него будет работать сам по себе, без необходимости подключать дополнительные пакеты.
Если ваше приложение собирается под .NETStandard 2.0 (или любую его реализацию, под которую нет более специфической версии, например под .NET Core) - то при подключении Selenium.WebDriver вам придется подключить еще и Newtonsoft.Json.

Комментариев нет:

Отправить комментарий