如何自动递增本地NuGet(BaGet)包版本号或从ABP程序集读取版本
自动版本号解决方案(适配ABP框架+本地NuGet)
方案1:复用ABP框架版本号 + 自定义修订号
你可以通过MSBuild属性直接引用ABP包的版本,避免手动硬编码框架版本。确保项目已引用ABP核心包(如Volo.Abp.Core),然后修改.csproj的PropertyGroup:
<PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <RootNamespace>Macha.Abp.Common</RootNamespace> <GeneratePackageOnBuild>True</GeneratePackageOnBuild> <PackageReadmeFile>README.md</PackageReadmeFile> <!-- 定义ABP框架版本,只需和ABP包版本保持一致 --> <AbpVersion>5.3.3</AbpVersion> <!-- 自定义修订号,可手动更新或自动生成 --> <Revision>24</Revision> <!-- 拼接最终版本号 --> <Version>$(AbpVersion).$(Revision)</Version> </PropertyGroup>
如果想完全自动化修订号,可替换为时间戳或构建服务器环境变量,比如:
<PropertyGroup> <!-- 其他属性不变 --> <AbpVersion>5.3.3</AbpVersion> <!-- 用当前时间戳作为修订号,避免手动修改 --> <Revision>$([System.DateTime]::Now.ToString("yyyyMMddHHmm"))</Revision> <Version>$(AbpVersion).$(Revision)</Version> </PropertyGroup>
方案2:从ABP程序集动态读取版本号
若不想硬编码ABP版本,可通过MSBuild任务从已引用的ABP程序集里读取版本。在.csproj中添加自定义构建任务:
<PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <RootNamespace>Macha.Abp.Common</RootNamespace> <GeneratePackageOnBuild>True</GeneratePackageOnBuild> <PackageReadmeFile>README.md</PackageReadmeFile> <Revision>24</Revision> </PropertyGroup> <Target Name="GetAbpVersion" BeforeTargets="GenerateNuspec"> <!-- 读取ABP核心程序集的版本 --> <GetAssemblyIdentity AssemblyFiles="$(NuGetPackageRoot)\volo.abp.core\$(AbpVersion)\lib\netstandard2.0\Volo.Abp.Core.dll"> <Output TaskParameter="Assemblies" ItemName="AbpAssembly" /> </GetAssemblyIdentity> <PropertyGroup> <!-- 提取版本号的前三位(如5.3.3) --> <AbpFrameworkVersion>$([System.Version]::Parse('%(AbpAssembly.Version)')).ToString(3)</AbpFrameworkVersion> <Version>$(AbpFrameworkVersion).$(Revision)</Version> </PropertyGroup> </Target>
注意:需确保$(NuGetPackageRoot)指向你的本地NuGet缓存或BaGet仓库的包目录,也可直接指定ABP程序集的本地路径。
方案3:Git版本化工具(推荐)
如果团队用Git管理代码,可使用GitVersion自动生成版本号,它能根据Git标签、提交记录自动计算版本,还可固定ABP版本前缀。
安装GitVersion后,在项目根目录添加GitVersion.yml配置:
mode: Mainline major: 5 minor: 3 patch: 3 next-version: 5.3.3
然后在.csproj中集成GitVersion:
<PropertyGroup> <!-- 其他属性不变 --> <Version>$(GitVersion.MajorMinorPatch).$(GitVersion.BuildNumber)</Version> </PropertyGroup>
这样每次构建时,GitVersion会自动基于提交次数生成修订号,无需手动修改任何版本信息。
内容的提问来源于stack exchange,提问作者Çağlar Ayhan
相关产品推荐
相关产品推荐

