пятница, 17 мая 2024 г.

Как обновить устаревшие версии зависимостей в солюшене в .NET


Как же часто бывает в проектах, особенно где доминирует легаси-код, что добавленные ранее зависимости тяготеют проект. Это мешает внедрять новые фичи, старые зависимости наслаиваются как снежный ком и не дают развиваться проекту.

Если обратиться к книге "Роберта Мартина. Чистый код", то автор в главе 1 приводит очень интересный пример одной компании, которая в конце 80-х годов написала приложение-бестселлер. Приложение было настолько популярным, что его повсеместно покупали и использовали. Но в последующем итерации разработки стали затягиваться, выпуски новых версий происходили с большими задержками. Ошибки и уязвимости между версиями не исправлялись, сбои происходили всё чаще. В конечном итоге пользователи перестали использовать данное приложение, а вскоре компания обанкротилась.

В данном случае плохой код привел к краху компании. Однако в наше время к этому может привести несвоевременное обновление версий зависимостей разрабатываемого продукта.

В этой статье разберем разные способы определения устаревших пакетов и обновления их при необходимости.

Способ №1. Диспетчер пакетов в IDE (самый распространённый)

В Visual Studio или Rider можно легко узнать, доступны ли новые версии пакетов, используемых вашим проектом, с помощью диспетчера пакетов NuGet.

Если используете MS Visual Studio сделайте следующее:

1) откройте Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution… (Инструменты -> Менеджер NuGet-Пакетов -> Управлять NuGet-Пакетами в Решении…);

2) перейдите на вкладку Updates (Обновления);

3) выберите все обновления и нажмите Update (Обновить). Есть также возможность обновить их по одному;

4) перейдите на вкладку Consolidate (Консолидация). Будут показаны пакеты, установленные в разных версиях в проектах решения, и что позволит привести все установленные пакеты к одной версии.

Если используете Jetbrains Rider:

1) откройте View -> Tool Windows -> NuGet (Вид -> Окна Инструментов -> NuGet);

2) для обновления установленных пакетов, нажмите Upgrade Packages in Solution (Обновить пакеты в решении) на панели инструментов окна NuGet

3) далее необходимо выбрать, какие пакеты следует обновить. Либо можно выбрать один из установленных пакетов в левой части окна NuGet, выбрать нужную версию в правой части, а затем обновить версию пакета в конкретных проектах.

Способ №2. Утилита dotnet-outdated

Это утилита командной строки с открытым исходным кодом. Подробнее о ней: https://github.com/dotnet-outdated/dotnet-outdated

Сначала нужно установить данную утилиту, выполнив следующую команду:

Теперь можно вызвать её, выполнив команду в папке проекта или решения:

Утилита выдаст список всех доступных обновлений, выделенных цветом:

- зеленым – патчи и исправления ошибок (обратно совместимо),

- желтым – обновления минорных версий (обратно совместимо, добавлены новые функции),

- красным – обновления мажорных версий (возможны ломающие изменения).

Чтобы обновить все устаревшие пакеты, выполните команду:

Способ №3. Через команду dotnet

Также можно использовать утилиты командной строки dotnet напрямую. Чтобы получить список устаревших пакетов, выполните следующую команду:

Чтобы обновить устаревший пакет, нужно выполнить команду:

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

Если проект размещён на GitHub, не обязательно постоянно помнить о необходимости проверки обновлений. Утилиты GitHub, вроде Dependabot помогут в этом, проанализировав зависимости проектов и создавая пул-реквесты каждый раз, когда появляется новая версия какой-то из зависимостей.

Источники:

1) https://bartwullems.blogspot.com/2024/05/net-core-view-outdated-packages.html?m=1

2) Роберт Мартин. Чистый код.

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

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