PackageSmith
NuGet 패키지 버전을 작성된 바로 그 자리에서: 모든 패키지 줄 뒤에 최신 버전, 마우스를 올리면 전체 내역, Ctrl+.로 업데이트 — 그리고 취약하거나 사용되지 않는 패키지는 빌드보다 먼저 알려 줍니다.
무료 · Visual Studio 2022 및 2026 · UI 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 줄 뒤에: 패키지가 최신이면 눈에 띄는 것이 없고, 그렇지 않으면 변경 폭의 색으로 최신 버전이 표시됩니다. 목록에서 제외된 버전은 제안되지 않으며, 시험판은 설정을 바꾸지 않는 한 이미 시험판을 사용하는 패키지에만 제안됩니다.

| 줄 뒤 | 의미 |
|---|---|
| ✓ 최신 | 패키지가 최신 버전입니다. |
| → 8.0.4 패치 | 세 번째 숫자만 바뀝니다: 수정. |
| → 6.5.1 마이너 | 두 번째 숫자가 바뀝니다: 새 기능, 호환성을 깨는 변경은 의도하지 않음. |
| → 5.0.2 메이저 | 첫 번째 숫자가 바뀝니다: 호환성을 깨는 변경이 들어가는 곳. |
| ⚠ 취약 · 높음 | 사용 중인 버전에 알려진 보안 취약성이 있으며, 심각도가 함께 표시됩니다. |
| 사용되지 않음 · … 사용 | 작성자가 패키지를 더 이상 사용하지 않도록 지정하고, 대신 사용할 패키지를 알려 줍니다. |
마우스를 올리면 나타나는 카드
코드의 버전이나 줄 뒤의 텍스트에 포인터를 올리면 카드에 설명, 더 새로운 각 버전 계열의 최신 버전(8.0.0 패키지의 경우 10.0.13, 9.0.10, 8.0.21)과 날짜, 더 새로운 버전이 몇 개 더 있는지, 취약성과 이를 피하는 가장 가까운 업데이트, 그리고 …(으)로 업데이트, 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와 함께 작동하나요?
예. 둘 다 줄 끝에 쓰기 때문에 그 공간을 나눠 씁니다: 버전이 먼저, LensSmith의 NuGet 경고가 그 뒤에 표시됩니다.
문제를 보고하거나 기능을 제안하려면 어디로 가야 하나요?
GitHub의 Feedback 리포지토리에 이슈를 등록하세요. 버그와 아이디어를 위한 양식이 있습니다(비공개 이름은 바꿔 주세요). Marketplace의 Q&A 탭을 이용할 수도 있습니다.
변경 내역
1.0.1
- 확장이 유용하게 쓰인 뒤 한 번만 Marketplace 평가를 요청합니다. 나중에, 다시 묻지 않음을 고를 수 있고 옵션에서 끌 수도 있습니다.
1.0.0
- 첫 공개 릴리스.