Legacy projects часто страдают от беспорядка в package dependencies: unused libraries, packages, подключенные не к тем projects, или code, который полагается на transitive dependencies вместо direct ones.
Visual Studio дает простой способ удалить unused packages:
-
Right-click на project.
-
Выберите Remove Unused References…
-
Примените предложенные изменения.

Но это действие может привести к build errors. Почему так происходит?
Первая причина: package referenced не тем project
Package может быть referenced в одном project, но использоваться в другом dependent project. Например:
-
У вас есть projects API и Core, где API зависит от Core.
-
Package
prometheus-net.AspNetCoreошибочно добавлен в Core, но реально используется только в API. -
После Remove Unused References
prometheus-net.AspNetCoreудаляется из Core, из-за чего в API появляются build errors.

Решение простое: установите нужный package напрямую в API project. В Visual Studio можно поставить cursor на unresolved reference и использовать Alt+Enter -> Install package.
Project, который использует package, должен ссылаться на этот package напрямую.
Вторая причина: code полагается на transitive dependency
Project также может использовать types из package, на который он никогда не ссылался напрямую. Вместо этого package приходит как dependency другого NuGet package.

Например:
-
Ваш project напрямую references Package A.
-
Package A зависит от Package B.
-
Ваш code использует types из Package B, хотя project file содержит только Package A.
-
Если Package A определяется как unused и удаляется, Package B исчезает вместе с ним, и build fails.
Исправление - добавить Package B как direct dependency project, который его использует. Это делает реальную dependency explicit и защищает build от unrelated package cleanup или upgrades.
Заключение
Структурированный подход к dependency management делает больше, чем просто убирает лишний мусор. Он проясняет ownership, снижает accidental coupling между projects и упрощает поддержку codebase.
После удаления references всегда rebuild всей solution и добавляйте direct package references везде, где compiler показывает hidden dependency.