#c_sharp #.net #uwp
При попытке подключить библиотеку к uwp приложению получил вот такое предупреждение:
"Проект предназначен для ".NetCore", в то время как ссылка файла предназначена для
".NetFramework""
Вроде, и то платформа, и то платформа, так в чем разница, зачем их две и возможна
ли связь между ними (подключать одно к другому и наоборот)?
Ответы
Ответ 1
.NET Framework - это старая платформа, работающая только под Windows.
.NET Core - это новая платформа, которая может работать как под Windows, так и под
Linux. Но она еще довольно "сырая" - множество инструментов еще не перенесены на нее.
Подключить одно к другому не получится, потому что у них разные системные библиотеки
(а также разные системы сборки если вы используете Visual Studio версии 2015 или ниже).
Кроме них, есть еще платформы:
Mono - может работать как под Windows, так и под Linux. Пытается быть совместимой
с .NET Framework.
UWP - платформа для написания Windows-приложений, использующих WinRT. Не знаю про
совместимость с .NET Framework.
Silverlight - старая платформа (застряла примерно на уровне .NET 4.5), предназначенная
для работы в браузере (вроде java-апплетов). Не так давно была серьезно ранена гуглом,
который перестал поддерживать NPAPI в своем Хроме. Не совместима с .NET Framework.
.NET Compart Framework - несовместимая вариация .NET Framework для Windows CE. Сейчас
находится на той же свалке, куда был выброшен Windows CE.
Unity - форк Mono, платформа для написания графических (в том числе 3D) приложений.
Есть вариант встраивания в браузер (не работает в Хроме из-за отказа от NPAPI в Хроме
работает благодаря технологии Web Assembly).
PCL (Portable Class Library) - общее подмножество разных версий .NET Framework, UWP
и Silverlight. Совместима с ними в одну сторону (PCL-библиотеку можно использовать
на перечисленных платформах).
.NET Standard - новая реинкарнация PCL. От PCL отличается подходом к версионированию:
если для PCL разработчик библиотеки выбирает список поддерживаемых платформ, то для
.NET Standard выбирается версия стандарта (а для платформ известно какие версии ими
поддерживаются).
Ответ 2
Если посмотреть какие версии NetStandard поддерживает UWP https://habrahabr.ru/post/312026/
То увидим, что это 1.4. Текущая максимальная версия 1.6
https://msdn.microsoft.com/ru-ru/magazine/mt590967.aspx
Наконец, .NET Core — это нижележащая инфраструктура, от которой
зависит .NET Native. Когда проектировали .NET Native, стало понятно,
что .NET Framework не подойдет в качестве фундамента для библиотек
классов этой инфраструктуры. Дело в том, что .NET Native статически
связывает инфраструктуру с приложением, а затем удаляет все лишнее,
что не нужно приложению. (Здесь я сильно упрощаю общую картину, но
идею вы уловили. Подробнее на эту тему см. «Inside .NET Native» по
ссылке bit.ly/1UR7ChW.)
Традиционная реализация .NET Framework не
предусматривает разбиения на модули, поэтому компоновщик (linker) не
может включить в приложение лишь ту часть инфраструктуры, которая
нужна приложению. Но .NET Core, по сути, является ответвлением .NET
Framework, реализация которой оптимизирована с учетом модульности.
Другое преимущество этой реализации — возможность поставлять .NET Core
Framework как набор NuGet-пакетов, что позволяет вам обновлять
индивидуальные классы вне самой .NET Framework. Однако, прежде чем
двигаться дальше, давайте обсудим изменения в NuGet.
ПО UWP ориентировано на .Net Core, поэтому не совместимо с библиотеками .NET Framework