如何在.csproj文件中获得两个日期之间的差异



我在csproj文件中看到了一些类似的代码

$([System.DateTime]::UtcNow.ToString(mmff))

自动递增程序集版本:

<VersionSuffix>2.0.0.$([System.DateTime]::UtcNow.ToString(mmff))</VersionSuffix>
<AssemblyVersion Condition=" '$(VersionSuffix)' == '' ">0.0.0.1</AssemblyVersion>

那是什么语言/脚本?我如何使用它来获得两个日期之间的差异?

我试着做这样的事情:

<VersionMajor>2</VersionMajor>
<VersionMinor>1</VersionMinor>
<DaysFromLastRelease>$(([System.DateTime]::UtcNow - new [System.DateTime](2021,1,1))::TotalDays)</DaysFromLastRelease>

但它不起作用:(

.csproj文件基本上是MSBuild文件(XML(。您所指的嵌入语法称为属性函数。

似乎不支持使用减号(-(进行减法运算。属性函数中有一个Subtract()属性函数。

也许这可以成为解决方案的基础。我没有试过!

<Now>$([System.DateTime]::UtcNow.DayOfYear)</Now>
<January>$([System.DateTime]::new(2021,1,1)).DayOfYear</January>
<!-- or... (not sure about the below)
<January>$([System.DateTime]::Parse("1/1/2021").DayOfYear)</January>
-->
<DaysFromLastRelease>$([MSBuild]::Subtract($(Now), $(January)))</DaysFromLastRelease>

其他可能性

  • 通过编写MSBuild任务来计算日期差
  • 调用您编写的一个简单程序
  • 以某种方式使用外部程序设置环境变量,然后在.csproj中引用该变量

这就是我的工作原理:

<PropertyGroup>
<VersionMajor Condition="'$(VersionMajor)' == ''">0</VersionMajor>
<VersionMinor Condition="'$(VersionMinor)' == ''">0</VersionMinor>
<VersionPatch Condition="'$(VersionPatch)' == ''">$([System.DateTime]::UtcNow.Subtract($([System.DateTime]::new(2001,1,1))).TotalDays.ToString("0"))</VersionPatch>
<VersionRevision Condition="'$(VersionRevision)' == ''">$([System.DateTime]::UtcNow.TimeOfDay.TotalMinutes.ToString("0"))</VersionRevision>
<Version>$(VersionMajor).$(VersionMinor).$(VersionPatch).$(VersionRevision)</Version>
</PropertyGroup>

在这里我手动设置了VersionMajor和VersionMinor。然后我会自动增加Patch和revision的值。

  • 补丁:自2001/01/01(二十一世纪第一天(以来的天数
  • 修订:一天的总分钟数

这很好,直到2180年6月(记住máx versión的数字是65534(。


额外提示:我将所有这些行放入Properties文件夹中的Version.Build.props文件中。然后我从csproj文件导入它,并带有以下标签:

<Import Project="$([MSBuild]::GetPathOfFileAbove('Version.Build.props', '$(MSBuildThisFileDirectory)/Properties/'))" />

通过这种方式,我可以在我的csproj文件中手动设置项目版本,只需设置VersionMajor和VersionMinor,就可以将它们自动或混合使用,这就是我实际要做的。

相关内容

  • 没有找到相关文章

最新更新