先说说刚学到的另一种方法也可以做到Nuget包版本统一管理。其实也是在新入职的公司学到的。
新公司项目源码根目录有这样一个文件:Directory.Build.targets,内容非常简洁,就是所有nuget包引用,如下:
<Project>
    <ItemGroup>
        <PackageReference Update="CommandLineParser" Version="2.7.82" />
        <PackageReference Update="CommnunicationHelper" Version="2.3.8.2" />
        <PackageReference Update="Dapper" Version="2.0.123" />
        <PackageReference Update="FluentFTP" Version="39.0.1" />
        <PackageReference Update="log4net" Version="2.0.15" />
        <PackageReference Update="M2MqttClientDotnetCore" Version="1.0.1" />
        <PackageReference Update="M2MqttDotnetCore" Version="1.1.0" />
        <PackageReference Update="Newtonsoft.Json" Version="13.0.1" />
        <PackageReference Update="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.0" />
        <PackageReference Update="NLog" Version="4.7.13" />
        <PackageReference Update="Ninject" Version="3.3.3" />
        <PackageReference Update="Ninject.Extensions.Xml" Version="3.3.0" />
        <PackageReference Update="NModbus4" Version="2.1.0" />
        <PackageReference Update="SharpZipLib.NETStandard" Version="1.0.7" />
        <PackageReference Update="Topshelf" Version="4.3.0" />
        <PackageReference Update="RestSharp" Version="108.0.3" />
        <PackageReference Update="Swashbuckle.AspNetCore" Version="5.6.3" />
        
        <PackageReference Update="HslCommunication" Version="11.6.2"  />
        <PackageReference Update="BouncyCastle.Cryptography" Version="2.0.0" />
        
        <PackageReference Update="System.Diagnostics.PerformanceCounter" Version="6.0.1" />
        <PackageReference Update="System.IO.Ports" Version="7.0.0" />
        <PackageReference Update="MySql.Data" Version="8.0.29" />
        <PackageReference Update="System.Data.SQLite.Core" Version="1.0.117" />
        <PackageReference Update="Microsoft.Data.SqlClient" Version="4.0.0" />
        <PackageReference Update="System.Management" Version="7.0.0" />
        <PackageReference Update="System.Data.DataSetExtensions" Version="4.5.0" />
        <PackageReference Update="Microsoft.Extensions.Configuration.FileExtensions" Version="6.0.0" />
        <PackageReference Update="System.Configuration.ConfigurationManager" Version="7.0.0" />
        <PackageReference Update="Microsoft.CSharp" Version="4.7.0" />
        <PackageReference Update="Microsoft.Windows.Compatibility" Version="7.0.0" />
		<PackageReference Update="SuperSocket.ClientEngine" Version="0.10.0" />
	</ItemGroup>
</Project>
有了这个文件,解决方案里面其他项目,类库再引入nuget包之后,要把版本号去掉,例如这样:
  <ItemGroup>
    <PackageReference Include="HslCommunication"  />
  </ItemGroup>当然如果这里写了不同的版本,编译时还是优先项目文件里面的版本进行打包编译。
然后就看见了下面的方法,其实应该是一个原理吧
下面文章转自公众号:DotNetCore实战 原文
在 .net 7 以前,项目对于 nuget 依赖项的版本依赖散落与解决方案的各个角落。这导致升级维护和查看的时候都比较麻烦。在 .net 7 中,你可以使用一个文件来集中管理你的 Nuget 依赖版本号。本篇文章将介绍如何使用这个功能。
为什么需要这个功能
通过单文件控制 Nuget 依赖版本号。那么你就可以:
- 统一查看 
- 升级的时候只要该这一个地方 
- 统一版本号,至少不会忘记升级某个项目 
怎么操作呢
修改 Directory.Build.props
在你的项目根目录下创建一个 Directory.Build.props 文件,然后添加以下内容:
<Project>
    <PropertyGroup>
        <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
    </PropertyGroup>
</Project>
这样就启用了这个功能。创建一个 Directory.Packages.props 文件
在你的项目根目录下创建一个 Directory.Packages.props 文件,然后添加以下内容:
<Project>
    <ItemGroup>
        <PackageVersion Include="xunit" Version="2.4.2"/>
        <PackageVersion Include="xunit.runner.visualstudio" Version="2.4.5">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        </PackageVersion>
        <PackageVersion Include="coverlet.collector" Version="3.2.0">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        </PackageVersion>
    </ItemGroup>
</Project>
这个文件就是你的 Nuget 依赖版本号的集中管理文件。其中的写法除了 PackageVersion 元素外,其他的都是 Nuget 的写法。你可以在这个文件中添加你的 Nuget 依赖版本号。
再次注意,这里是 PackageVersion 而不是 PackageReference。修改你的项目文件
在你的项目文件中,你可以通过以下方式来引用 Nuget 依赖:
<Project>
    <ItemGroup>
        <PackageReference Include="xunit" />
        <PackageReference Include="unit.runner.visualstudio" />
    </ItemGroup>
</Project>
该文件和以前的写法是一样的。但是你不需要再指定版本号了。
这样你就可以通过 Directory.Packages.props 来集中管理你的 Nuget 依赖版本号了。如果我是 .net 7 以前的版本那怎么办
实际上在 .net 7 之前,你也可以通过因为额外的 Sdk 来实现这个功能。
Microsoft.Build.CentralPackageVersions1总结
通过这个功能,你可以集中管理你的 Nuget 依赖版本号。这样你就可以统一查看,升级的时候只要该这一个地方,统一版本号,至少不会忘记升级某个项目。参考
- Central Package Management (CPM)2 
- Directory.Build.props3 
 
           
             
           
                        
评论区