先说说刚学到的另一种方法也可以做到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
评论区