I am using Visual Studio 2022 for developing .NET C# projects, and I currently target .NET 8. Since the release of .NET 9, the NuGet Package Manager in Visual Studio offers updates for Microsoft packages in version 9.0.0
. However, I want to stick with versions starting with 8.x.x
while targeting .NET 8.
For example, I am currently using the package Microsoft.EntityFrameworkCore
version 8.0.11
. I would like to:
8.x.x
range, such as a hypothetical version 8.0.12
.Is there a way to configure Visual Studio or the NuGet configuration to suppress updates outside the 8.x.x
range while still being notified of updates relevant to .NET 8?
Is there a way to configure Visual Studio or the NuGet configuration to suppress updates outside the 8.x.x range while still being notified of updates relevant to .NET 8?
Yes, you can use Package versioning to exclude version 9.x.x
updates from appearing in the list of available updates in the NuGet Package Manager.
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="[8.0.11,9.0.0)" />
</ItemGroup>
It will accepts any 8.0.11 higher version, but not 9.x and higher.
One option that requires a tiny bit of extra management is to use a combination of the original answer with project variables in the csproj file.
<Project>
...
<PropertyGroup>
<!-- mixed inclusive minimum and exclusive maximum version -->
<EntityFrameworkCoreVersion>[8.0.12,9.0)</EntityFrameworkCoreVersion>
</PropertyGroup>
...
</Project>
and then use the variable to set the version for any packages like this:
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="$(EntityFrameworkCoreVersion)" />
Now, if you use the package manager gui, nuget will still replace $(EntityFrameworkCoreVersion) with the new version (ex: 8.0.13)
However, (and this is the tiny bit of work part) instead of using the package manager gui to update the version(s)...just change the variable inside the csproj file instead.
Full Example:
1. Setup your project to use a variable as explained above
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<EntityFrameworkCoreVersion>[8.0.12,9.0)</EntityFrameworkCoreVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="$(EntityFrameworkCoreVersion)" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="$(EntityFrameworkCoreVersion)" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(EntityFrameworkCoreVersion)" />
</ItemGroup>
</Project>
2. Open package manager to observe packages that have updates (in this case 8.0.12 > 9.0.0)
3. Edit the csproj project variable(s) to include the new version (ex: [8.0.13,9.0)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<EntityFrameworkCoreVersion>[8.0.13,9.0)</EntityFrameworkCoreVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="$(EntityFrameworkCoreVersion)" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="$(EntityFrameworkCoreVersion)" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(EntityFrameworkCoreVersion)" />
</ItemGroup>
</Project>
4. Save csproj
Now, those 3 packages are updated to 8.0.13 and the next time you look for updates, it should only show the packages whose version is greater than 8.0.13, but less than 9.0.0
It really isn't much more additional/manual work, you can still update many packages at once. You can create as many variables for different "sets" of packages like Microsoft.AspNetCore., Microsoft.Identity., etc.
You can also do this with central package management as well by using a Directory.Packages.props file. VS will look for this file in the folder hierarchy all the way to the root folder of the drive your project/solution resides on and a single change to this file will update all projects in a solution vs. just one project. However, I'm not sure when it was introduced...I think it has to be an sdk style project which I think was introduced in VS 2019???
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With