Under .NET's older packages.config
system for NuGet, I could constrain the possible versions of a package that are considered when packages are updated by using the allowedVersions
attribute on the Package element
<package id="Newtonsoft.Json" version="10.0.3" allowedVersions="[10.0.3]" />
When update-package
is run within Visual studio for a project including the above, no update will occur for Newtonsoft.Json
because I've pinned to 10.0.3 using the allowedVersions
attribute.
How can I achieve this under PackageReference
? Applying semver syntax to the Version attribute only affects the version restored - it doesn't constrain updates. So if I specify the below PackageReference
and run update-package
, I will for example be upgraded to 11.0.1 if 11.0.1 is in my NuGet repository.
<PackageReference Include="Newtonsoft.Json" Version="[10.0.3]" />
Background
We rely on command line tooling to update packages because we have both fast moving internal packages (updated multiple times a day) and more stable low moving packages (eg: ASP.NET). On large codebases updating each dependency by hand in .csproj
files is simply not scalable for us (and error prone). Under packages.config
we can 'pin' the third party packages which we don't want upgraded and also update to the latest fast moving dependencies.