Assembly版本配置中VersionRevision始终返回0的技术求助
VersionRevision始终返回0的问题排查
问题背景
因权限限制无法使用流水线,仅靠Git管理代码,自定义Assembly版本号规则为:1.<年份后两位>.<月日>.<时分>,示例格式如1.22.1026.903。但实际构建时VersionRevision始终返回0,当前使用的MSBuild配置如下:
<PropertyGroup> <VersionMajor>1</VersionMajor> <VersionMinor>$([System.Int64]::Parse($([System.DateTime]::UtcNow.Date.ToString("yy"))))</VersionMinor> <VersionPatch Condition="'$(VersionPatch)' == ''">$([System.Int64]::Parse($([System.DateTime]::UtcNow.Date.ToString("MMdd"))))</VersionPatch> <VersionRevision Condition="'$(VersionRevision)' == ''">$([System.Int64]::Parse($([System.DateTime]::UtcNow.Date.ToString("HHmm"))))</VersionRevision> </PropertyGroup> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <Version>$(VersionMajor).$(VersionMinor).$(VersionPatch).$(VersionRevision)</Version> <Deterministic>False</Deterministic> </PropertyGroup>
测试静态带前导零的值(如下配置)时,VersionRevision能正常返回对应数值:
<VersionRevision Condition="'$(VersionRevision)' == ''">$([System.Int64]::Parse("0903"))</VersionRevision>
问题原因
问题出在VersionRevision的生成逻辑上:$([System.DateTime]::UtcNow.Date)会获取当前UTC日期的零点时刻,此时HHmm格式的时间字符串必然是0000,转成Int64后就是0,导致VersionRevision始终为0。
解决方案
去掉Date属性,直接使用UtcNow获取当前完整的UTC时间,这样就能正确拿到当前的时分信息。修正后的VersionRevision配置如下:
<VersionRevision Condition="'$(VersionRevision)' == ''">$([System.Int64]::Parse($([System.DateTime]::UtcNow.ToString("HHmm"))))</VersionRevision>
完整修正后的MSBuild配置:
<PropertyGroup> <VersionMajor>1</VersionMajor> <VersionMinor>$([System.Int64]::Parse($([System.DateTime]::UtcNow.Date.ToString("yy"))))</VersionMinor> <VersionPatch Condition="'$(VersionPatch)' == ''">$([System.Int64]::Parse($([System.DateTime]::UtcNow.Date.ToString("MMdd"))))</VersionPatch> <VersionRevision Condition="'$(VersionRevision)' == ''">$([System.Int64]::Parse($([System.DateTime]::UtcNow.ToString("HHmm"))))</VersionRevision> </PropertyGroup> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <Version>$(VersionMajor).$(VersionMinor).$(VersionPatch).$(VersionRevision)</Version> <Deterministic>False</Deterministic> </PropertyGroup>
内容的提问来源于stack exchange,提问作者Yzak
相关产品推荐
相关产品推荐

