Как стать автором
Обновить

Комментарии 6

Спасибо за статью, приятно видеть ещё на хабре не только "корпоративный планктон", а ещё и креативных людей :)

Как прогресс идёт, 10 лет назад я статейку писал про сжатие клиентского кода перед копиляцией, а Вы написали про рантайм:

https://habr.com/en/articles/169529/

Несколько вопросов по статье:

  1. Почему-бы не положить все версии .NET в один nuget пакет? Для примера Newtonsoft.Json в одном пакете содержит в себе все версии, начиная с .NET Framework 2.0 и заканчивая .NET Standard 2.0

  2. Есть смысл менять namesapce при каждом выходе нового фреймворка? .NET славится свой обратной совместимости, поэтому до сих пор бинарник собранный на .NET Framework 2.0 можно запускать на .NET 8.0 А так получается всем пользователям придётся не просто обновить сборку, а ещё и namespace'ы переписать. К примеру в том-же GitHub'е Dependabot автоматом может обновлять версии зависимых сборок из NuGet'ов

  1. Почему-бы не положить все версии .NET в один nuget пакет? Для примера Newtonsoft.Json в одном пакете содержит в себе все версии, начиная с .NET Framework 2.0 и заканчивая .NET Standard 2.0

Из-за предупреждений вроде NETSDK1215 и NU1903, которые выдаются при сборке проектов. Особенно это критично для библиотек, ориентированных на конкретные версии ASP.NET Core. Вообще, Microsoft рекомендует в пакетах с такими библиотеками поддерживать не более трех последних версий ASP.NET Core.


Newtonsoft.Json – это библиотека общего назначения и, в принципе, указанные выше требования для нее можно проигнорировать. Тем не менее, данная библиотека не обновляется с 2023 года и в скором времени может стать неактуальной.

  1. Есть смысл менять namesapce при каждом выходе нового фреймворка? … А так получается всем пользователям придётся не просто обновить сборку, а ещё и namespace'ы переписать.

Для решения этой проблемы и был создан пакет WebMarkupMin.AspNetCoreLatest.

Вообще, Microsoft рекомендует в пакетах с такими библиотеками поддерживать не более трех последних версий ASP.NET Core.

Первый раз такое слышу... Да даже пакеты SignalR одновременно поддерживают как .NET 9, .NET Core 2.0 так и .NET Framework 4.8.
Может Вы имеете ввиду что Microsoft официально поддерживает версии своих продуктов текущая версия -2? Т.е. если у меня будет проблема на более старой версии, то служба поддержки Microsoft мне может ответить отказом.

Тем не менее, данная библиотека не обновляется с 2023 года и в скором времени может стать неактуальной

Как минимум пакеты от Microsoft

которые зависят от последней версии Newtonsoft.Json вышли месяц назад.

Если пакет давно не обновлялись, то это может значить что просто обновлять нечего. ECMA-335 тоже за 12 лет ни разу не обновлялся (Да и обновление было больше косметическое), а до сих пор новые версии .NET и CLR на основе того самого .NET CLI выходят.

Первый раз такое слышу...

Не могу сходу найти официальный документ с этой рекомендацией, но есть хорошая статья от Microsoft MVP Рика Страла «Upgrading several of my Applications and Libraries to .NET 5.0», в которой она упоминается. Библиотека Westwind.AspnetCore.LiveReload также, как и ASP.NET Core-расширения WebMarkupMin, содержит компонент middleware. В последней версии пакета Westwind.AspnetCore.LiveReload поддерживаются только три версии .NET, которые были актуальны на момент ее выхода.

Да даже пакеты SignalR одновременно поддерживают как .NET 9, .NET Core 2.0 так и .NET Framework 4.8.

Возьмем для примера пакет Microsoft.AspNetCore.SignalR.Common версии 9.0.0, который поддерживает следующие версии .NET:

  • .NET 9.0

  • .NET Standard 2.0

  • .NET Framework 4.6.2

.NET Core 2.0 и .NET Standard 2.0 – это не одно и тоже. NET Standard 2.0 и 2.1 по-прежнему актуальны, а большая часть пакетов ASP.NET Core 2.X в NuGet Gallery имеют статус deprecated. А .NET Framework я вообще не упоминал.

Может Вы имеете ввиду что Microsoft официально поддерживает версии своих продуктов текущая версия -2?

Именно это я и имею ввиду.

Т.е. если у меня будет проблема на более старой версии, то служба поддержки Microsoft мне может ответить отказом.

Дело совсем в другом: при использовании NuGet-пакетов, ориентированных на старые версии ASP.NET Core, выдаются предупреждения.

Мой подход к организации ASP.NET Core-расширений позволяет сохранить поддержку устаревших версий ASP.NET Core. Есть один пакет, ориентированный на актуальные версии ASP.NET Core, и несколько на устаревшие. В пакетах, ориентированных на устаревшие версии ASP.NET Core, по-прежнему доступны самые последние возможности из ядра WebMarkupMin.

Как минимум пакеты от Microsoft

которые зависят от последней версии Newtonsoft.Json вышли месяц назад.

Эти пакеты нужны для реализации обратной совместимости, т.к. не все еще успели перевести свою кодовую базу на использование библиотеки System.Text.Json. Рано или поздно миграция на System.Text.Json закончится, и библиотеку Newtonsoft.Json признают полностью устаревшей.

поддерживаются только три версии .NET, которые были актуальны на момент ее выхода

Да, возможно для .NET Core это актуально, я .NET Core проскочил и после .NET 4.8 сразу перешёл на .NET 5. Поэтому не сильно силён в сабже.

Рано или поздно миграция на System.Text.Json закончится, и библиотеку Newtonsoft.Json признают полностью устаревшей.

Если я не ошибаюсь, то MS ушли от практики поиска фатальных недостатков.

Ради интереса глянул что там с использованием Newtonsoft.Json и System.Text.Json в Visual Studio Professional 2022, из 14 270 установленных PE файлов:

  • 536 зависят от Newtonsoft.Json
    536 зависят от Newtonsoft.Json
  • 108 зависят от System.Text.Json
    108 зависят от System.Text.Json

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации