Какие версии .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 и т.д. Я бы взглянул в общих чертах на поддерживаемые ими рамки и следил за тем, что многие из проектов, которые могут быть реализованы, могут управляться такими библиотеками.