侧边栏壁纸
  • 累计撰写 71 篇文章
  • 累计创建 15 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

使用一个文件集中管理你的 Nuget 依赖版本号

寒江孤影
2023-08-21 / 0 评论 / 0 点赞 / 8 阅读 / 7175 字
温馨提示:
本文最后更新于 2023-08-21,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

先说说刚学到的另一种方法也可以做到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 依赖版本号。那么你就可以:

  1. 统一查看

  2. 升级的时候只要该这一个地方

  3. 统一版本号,至少不会忘记升级某个项目

怎么操作呢

修改 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

0

评论区