CPM — фича nuget, позволяющая задавать версии пакетов не для каждого проекта отдельно, а один раз в solution, в
Directory.Packages.props<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
</Project>
После этого, в файлах проектов можно не указывать версию:
<PackageReference Include="Newtonsoft.Json" />
По необходимости, в файле проекта по прежнему можно указать другую версию:
<PackageReference Include="Newtonsoft.Json" VersionOverride="13.0.2" />
CentralPackageTransitivePinningEnabled — обновляет транзитивные зависимости до версий, указанных в Directory.Packages.propsGlobalPackageReference — подключает пакет во все проекты, которые импортируют Directory.Packages.props====
На первый взгляд выглядит хорошо, но попробовал перейти на CPM в нынешнем проекте, и пока решил оставить как было.
Из-за legacy-проектов пришлось указывать слишком много
VersionOverride — без них солюшен даже не собирался. Риск обновить в них пакеты разом и словить в рантайме на проде баги и просадки производительности тоже выглядит большим.Но для новых проектов, must have, учитывая, что поддержка в IDE сейчас уже стала гораздо лучше
А вы уже используете Central Package Management?
UPD: автоматический конвертер PackageReference
@epeshkblog | Поддержать канал