Какие версии .NET должны поддерживаться пакетами NuGet, чтобы максимизировать их доступность и функциональность?
TL; ДР:
-
Учитывая, что я написал библиотеку с относительно переносимой функциональностью (например, Left.Pad.©.dll
). Я хочу сделать его доступным, хотя NuGet.
-
Требование: если кто-то хочет использовать мою библиотеку в любой версии любой платформы в любой версии любой с любыми обновлениями, установленными путем написания кода в любом документе IDE или любом, они должны это сделать.
-
Вопрос: Что представляет собой минимальный набор NuGet целевые рамки для достижения этого?
-
Бонусный вопрос: если есть какие-то "мертвые" рамки, которые не должны быть нацелены, или что-то еще, что следует учитывать при выборе целевых фреймворков, вы можете также упомянуть об этом.
/li >
Мысли (старая версия):
Пакеты NuGet поддерживают несколько версий и профилей .NET Framework, например, пакет может предоставить net20, net30, net35, net40, net45, sl3, sl4, sl5 и т.д. Однако, если предположить, что в функциональности пакета не всегда есть различия, предоставление большого количества версий будет пустой тратой времени сборки и размера пакета и вызовет излишнюю сложность. С другой стороны, предоставление пакета только для самой поддерживаемой версии Framework может привести к отсутствию функциональности, например .NET 4 поддерживает одновременное выполнение нескольких версий CLR на стороне, но в предыдущих версиях этого нет, поэтому эта функция будет потеряна, если будет предоставлена только версия для .NET 3.5 (я не уверен, я никогда не использовал ее и не знаю деталей). Если предоставляется версия PCL, логика проста, я предполагаю: просто исключите версии, которые покрывает PCL.
Ответы
Ответ 1
Решение 2018
Основываясь на данных атрибутах и предполагая, что они не зависят от технологий, специфичных для платформы (например, System.Drawing, ASP.NET или WPF, и в этом случае просто нацеливаются на платформу, которую вы можете и делаете с ней):
-
netstandard1.0
- netstandard2.0
Начните с .NET Standard 1.0 и поднимитесь до максимальной функциональности.
Это должно охватывать:
- .NET Framework 4.5
- .NET Core 1.0
- Mono 4.6
- Xamarin.iOS 10.0
- Xamarin.Android 7.0
- Windows Universal 10.0
- Windows non-Universal 8.0 (до .NET Standard 1.2)
- Windows Phone 8.1 (до .NET Standard 1.2)
- Windows Phone Silverlight 8.0 (до .NET Standard 1.0)
Если вы не можете разумно реализовать библиотеку в рамках относительно небольшого .NET Standard 1.0-1.2, последние три пункта, вероятно, будут исключены. Если вы все еще нуждаетесь в них, см. Пункты ниже.
.NET Standard 1.5+ увеличивает требования к версиям фреймворков и операционных систем, поэтому для максимальной совместимости могут потребоваться версии с несколькими стандартами .NET Standard.
-
portable-net40+*
Следующим важным моментом является устаревший PCL. Его версии .NET Framework 4.5+ не актуальны, поскольку они в основном покрыты стандартом .NET. Если вы хотите поддерживать Windows Phone 8 и не универсальный Windows Store 8, вы должны сделать это через PCL, если только вы не ограничены API, и в этом случае вам придется добавлять целевые объекты для платформы.
Если вам не нужны какие-либо дополнительные платформы, а .NET Framework 4.0 предоставляет некоторые полезные дополнительные функции для .NET 3.5, вы можете настроить ее напрямую, а не через PCL.
Это должно охватывать:
- .NET Framework 4.0
- Windows non-Universal 8.0
- Windows Phone 8.0
- Windows Phone Silverlight 8.0
-
net20
- net35
Если вы хотите поддерживать старые настольные версии Windows (например, Windows XP) и не обновленные более поздние версии Windows (например, Windows Vista + с .NET 3.0+), вы должны добавить поддержку рабочего стола Прямая реализация .NET Framework. Обратите внимание, что с 2018-01-01 самый низкий поддерживаемый .NET составляет 3.5 SP1, поэтому он будет ниже, чем это, вероятно, не является необходимым и, вероятно, ограничит доступный вам API без реальных преимуществ.
Это должно охватывать:
- .NET Framework 2.0-3.5
- Windows XP
-
Существуют и другие платформы, а именно Xamarin-специфичные, Tizen,.NET Micro и т.д. Доступ к ним можно получить только путем прямого таргетинга.
Это должно охватывать:
TL; DR
Что-то вроде netstandard1.1
+ portable-net40+win8
+ net35
охватывает каждую соответствующую платформу.
Решение будущего
Когда старые версии .NET полностью умирают, должен оставаться только стандарт .NET. Ну, если Microsoft не изобретает еще одну кросс-платформенную технологию унификации, как это уже делали с .NET,.NET PCL,.NET Standard...
TL; DR
Используйте самый низкий netstandard
.
Ответ 2
В момент написания самый простой способ - создать проект .NET Standard 1.1. Он поддерживает
- .NET Core 1.0 и выше
- .NET Framework 4.5 и выше
- Моно, Xamarin, Windows Phone и подробнее...
Так почти все современные платформы. Если вы хотите поддерживать старые платформы, например..NET Framework 3.0, добавьте это как отдельную "папку" в NuGet. Таким образом, новые приложения .NET Core все еще могут использовать ваш пакет.
Дополнительная информация
.NET Standard выполняет замену PCL. Самая низкая платформа .NET Framework, с которой вы можете настроить PCL, - это 4.0, что не намного ниже 4.5 с .NET Standard 1.1 (таким образом, ваш пакет не станет более доступным).
PCL также, похоже, не поддерживает .NET Core, в то время как .NET Standard почти поддерживает все платформы:
![Table of .NET Standard support]()
Также обратите внимание, что в соответствии с Microsoft, в настоящее время поддерживаются только .NET Framework 3.5 SP1 и .NET Framework >= 4.5.2. Все другие версии .NET Framework уже достигли конца жизни и не получат никаких обновлений. Windows Phone также мертв, а Silverlight тоже никуда не годится.
Как @Lex Li, упомянутый в комментариях,.NET Standard 1.1 имеет очень низкую поверхность API, что означает, что, возможно, некоторые важные API отсутствуют. Из-за этого в большинстве пакетов NuGet используется более высокая стандартная версия .NET. Рекомендуется использовать самую низкую версию .NET Standard.
Итак, с .NET Standard 1.1 вы будете поддерживать огромное большинство современных фреймворков. К сожалению, я не смог найти статистику распространения .NET Framework...
Если вы действительно хотите сделать свой пакет доступным для каждой платформы, посмотрите на возможных целевых платформах для NuGet a > . Я думаю, вам нужно atleast net11
и netstandard1.0
, возможно, добавить поддержку Silverlight и .NET MicroFramework...
Ответ 3
Вы должны настроить таргетинг на .net framework 2.0 и выше. Решение должно основываться на платформе, на которой приложение будет работать в процессе производства.
.net 2.0 входит в состав сервера Windows 2008 (SP2 и далее), и люди по-прежнему широко используют его в производстве.
Ref https://en.wikipedia.org/wiki/.NET_Framework
Ответ 4
Если вы хотите, чтобы он использовался не только для Windows -.NET Standard - это путь. Целевая задача - вопрос о том, какие библиотеки использовать в начале проекта и редко пересматривается, а новые проекты, как правило, используют последние версии фреймворков и библиотек.
Вы можете легко найти последние доли рынка пользовательских устройств на основе использования Интернета.
См. номера, выберите платформы, которые вы хотите найти, и перекрестно ссылайтесь на них, какие версии .NET доступны на них.
Ответ 5
Таргетинг .Net Standard предоставит вашему пакету nuget роскошь быть доступным в .NET framework,.NET core, mono, Xamarin, Universal Windows Platform и проектах Windows Phone.
Обратите внимание на следующее сообщение
![.NET standard]()
Чтобы решить, какую версию стандарта .Net вы должны использовать, используйте следующую таблицу:
![.NET standard support table]()
Источник.
Глядя на приведенную выше таблицу, я бы порекомендовал вам использовать .Net standard 1.0, если вам не нравится Windows Phone Silverlight или .Net standard 1.2, если вы этого не сделаете.
Кроме того, насколько я заметил, многие люди, которые выбрали ядро .net, фактически используют .net core 2.0, поэтому вам может понадобиться создать отдельную версию nuget для них с стандартом .net 2.0.
О второй части вашего вопроса, даже если определенная структура мертва, что не означает, что она уйдет мгновенно, она будет использоваться еще несколько лет, прежде чем она будет полностью мертвой, просто переход к различным параметрам требует времени.
Еще одна вещь, которую я хотел бы принять во внимание, это обычные используемые библиотеки, такие как Masstransit, EPPlus, и обычно используемые IOC и т.д. Я бы взглянул в общих чертах на поддерживаемые ими рамки и следил за тем, что многие из проектов, которые могут быть реализованы, могут управляться такими библиотеками.