PackageSmith
Версии NuGet-пакетов прямо там, где они записаны: последняя версия после каждой строки пакета, вся история при наведении, обновление по Ctrl+. — а уязвимые и нерекомендуемые пакеты отмечены раньше, чем об этом скажет сборка.
Бесплатно · Visual Studio 2022 и 2026 · 14 языков интерфейса · без телеметрии
Зачем PackageSmith

Устаревшее видно сразу
Не нужно открывать окно NuGet, чтобы узнать, что устарело: последняя версия стоит после каждого пакета — зелёным для патча, жёлтым для минора, оранжевым для мажора.
Сначала безопасные обновления
Известная уязвимость горит красным прямо в строке, вместе с ближайшей версией, где она исправлена; у нерекомендуемого пакета указана замена.
Только ваши источники
Версии берутся из источников пакетов вашего NuGet.config — nuget.org или фида вашей компании. Запрашиваются только имена и версии пакетов; ничего о вас или вашем проекте не отправляется.
Бесплатно и без подвохов
Без подписок, без «pro»-версии, без сбора данных и без сообщений в окне «Вывод» или при запуске. Единственное, о чём мы когда-нибудь попросим, — после того как вы им немного попользуетесь, — поставить оценку в Marketplace. Работает в Visual Studio 2022 и 2026, x64 и ARM64.
Возможности
- Последняя версия после каждого пакета, цветом по размеру шага; приглушённое
✓ последняяу актуальных пакетов. - Уязвимые и нерекомендуемые пакеты: серьёзность известной уязвимости и замена нерекомендуемого пакета.
- Карточка при наведении: описание, последняя версия каждой более новой линейки с датой и обновление в один щелчок.
- Обновление по Ctrl+.: до последнего патча, минора или мажора — или все пакеты файла в пределах их мажорной версии: одна правка, одна отмена.
- Все файлы с пакетами:
.csproj,.vbproj,.fsproj,Directory.Packages.props(централизованное управление пакетами),.props,.targetsиpackages.config;Version="$(ContosoVersion)"вычисляется из файла. - Ваши источники пакетов из NuGet.config, ответы кешируются между сеансами, есть автономный режим.
Версии в конце строки
После каждой строки PackageReference, PackageVersion и package: ничего броского, если пакет актуален, иначе — последняя версия цветом шага. Скрытые (unlisted) версии никогда не предлагаются; предварительные выпуски — только пакетам, которые уже их используют, если в настройках не указано иное.

| После строки | Значение |
|---|---|
| ✓ последняя | Пакет на последней версии. |
| → 8.0.4 патч | Меняется только третье число: исправления. |
| → 6.5.1 минор | Меняется второе число: новые возможности, без намеренных ломающих изменений. |
| → 5.0.2 мажор | Меняется первое число: здесь живут ломающие изменения. |
| ⚠ уязвимость · высокая | У используемой версии есть известная уязвимость; указана её серьёзность. |
| не рекомендуется · используйте … | Авторы больше не рекомендуют пакет и называют тот, который следует использовать вместо него. |
Карточка при наведении
Задержите указатель на версии в коде или на тексте после строки: карточка покажет описание, последнюю версию каждой более новой линейки (10.0.13, 9.0.10, 8.0.21 для пакета на 8.0.0) с датой, сколько ещё более новых версий есть, уязвимость с ближайшим обновлением без неё и кнопки Обновить до …, Открыть на nuget.org и Сайт проекта. Щелчок по любой версии в списке устанавливает её.

Обновление по Ctrl+.
Курсор на строке пакета, Ctrl+.: последний патч, последний минор и последний мажор предлагаются отдельно, так что безопасное обновление всегда в одном нажатии. Обновить все пакеты в этом файле в пределах их мажорной версии переводит каждый пакет на его последнюю версию того же мажора — мажоры остаются отдельным решением. Версия из свойства ($(ContosoVersion)) обновляется там, где файл её определяет. Файл правится как при ручном изменении: отмена работает, а Visual Studio восстанавливает пакеты как обычно.

Настройки
Средства → Параметры → SmithWorks → PackageSmith. У каждого параметра есть описание.
| Параметр | По умолчанию |
|---|---|
| Показывать последнюю версию после каждого пакета | вкл. |
| Отмечать актуальные пакеты меткой «✓ последняя» | вкл. |
| Предлагать предварительные выпуски для всех пакетов | выкл. |
| Отмечать пакеты, не найденные в ваших источниках | выкл. |
| Отмечать уязвимые и нерекомендуемые пакеты | вкл. |
| Карточка при наведении | вкл. |
| Обновление по Ctrl+. | вкл. |
| Проверять снова через | 1 час |
| Автономный режим | выкл. |
| Попросить оценку в Marketplace | вкл. |
Настройки хранятся в %LocalAppData%\PackageSmith, кеш версий — рядом с ними.

Вопросы и ответы
Отправляет ли PackageSmith какие-либо данные?
Он запрашивает у ваших источников пакетов (из NuGet.config; без него — nuget.org) версии пакетов из ваших файлов — те же запросы, что делает Visual Studio при их восстановлении. Больше ничего не отправляется: ни телеметрии, ни имён проектов, ничего о вас. Если включён Автономный режим, запросов нет вообще.
Фид моей компании требует входа. Это работает?
Пока нет: фиды, требующие учётных данных, пропускаются, а их пакеты остаются без пометок — неверный ответ не показывается. Публичные фиды v3 (nuget.org, открытые фиды компаний) работают.
Почему после некоторых пакетов ничего нет?
Ничего не пишется, когда версия задана диапазоном или шаблоном ([1.0,2.0), 13.*), когда свойство определено в другом файле или когда ни один источник не ответил. Включите Отмечать пакеты, не найденные в ваших источниках, чтобы видеть пакеты, которых, по ответу каждого источника, у него нет.
Работает ли это с централизованным управлением пакетами?
Да: версии показываются в Directory.Packages.props после каждого PackageVersion, и VersionOverride в проекте тоже.
Восстанавливает ли обновление пакеты?
PackageSmith только правит файл. Visual Studio восстанавливает пакеты после изменения — так же, как когда вы меняете версию вручную.
Работает ли это вместе с LensSmith?
Да. Оба пишут в конце строк, поэтому делят это место: сначала версия, за ней — предупреждение NuGet от LensSmith.
Где сообщить о проблеме или предложить идею?
Создайте issue в репозитории Feedback на GitHub — там есть формы для ошибок и идей (конфиденциальные имена лучше изменить). Также можно воспользоваться вкладкой Q&A на Marketplace.
История изменений
1.0.1
- Однократная просьба оценить расширение в Marketplace, когда оно уже было полезным, — с кнопками «Позже» и «Больше не спрашивать» и настройкой, чтобы её отключить.
1.0.0
- Первый публичный выпуск.