这是在准备将 IdentityServer4 升级至 .NET 9 的过程中遇到的一个问题,项目中引用的 nuget 包版本是在 Directory.Build.targets 中定义的
<ItemGroup>
<!--build related-->
<PackageReference Include="MinVer" Version="4.2.0" PrivateAssets="All" />
<PackageReference Update="SimpleExec" Version="11.0.0" />
<PackageReference Update="Bullseye" Version="4.2.0" />
<PackageReference Update="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
<PackageReference Update="IdentityModel" Version="6.0.0" />
</ItemGroup>
csproj 项目文件中也有对应的 PackageReference,但没有指定版本号
<ItemGroup>
<PackageReference Include="IdentityModel" />
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />
<PackageReference Include="Newtonsoft.Json" />
</ItemGroup>
如果在 visual studio 中升级 nuget 包,会直接更新当前 csproj 项目文件中的 PackageReference,加上最新版本号,而 Directory.Build.targets 中的版本号却没有更新
请参考文章 Directory.Packages.props
Directory.Packages.props 的存储库的根目录中创建一个新文件,声明集中定义的包版本,并将 MSBuild 属性 ManagePackageVersionsCentrally 设置为 true。<PackageVersion />中声明 Directory.Packages.props 项目。<PackageReference /> 属性的 Version 项目。文件 Directory.Packages.props
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Microsoft.AspNetCore.Http.Features" Version="2.3.0" />
</ItemGroup>
</Project>