在 MSBuild 属性中使用数学运算符

Using mathematical operators in MSBuild properties

这样做的目的是将构建版本设置为构建日期的时间戳。我使用 Directory.Build.props 文件来设置项目属性,其中我有以下内容:

<PropertyGroup>
    <Version>$([System.DateTime]::Now.Month).$([System.DateTime]::Now.Day).$([System.DateTime]::Now.Year)</Version>
</PropertyGroup>

这工作得很好,但我想通过添加一天中经过的总秒数来提高时间戳的分辨率。

我可以通过 $([System.DateTime]::Now.TimeOfDay.TotalSeconds) 很容易地得到这个值,但这是一个 Double 并且 Version 需要一个 UInt16 - 1。

认为 我可以通过 $([System.Convert]::ToUInt16( theAboveExpression )) 转换为 UInt16。

但是,double 可能太大了,所以我需要先将它分开,但我完全不知道该怎么做。到目前为止,我最好的尝试是盲目的尝试,因为我似乎找不到任何这样的例子:

$( $([System.DateTime]::Now.TimeOfDay.TotalSeconds) / 2 )

无法计算此表达式,我该如何完成?

当然,在决定寻求帮助后不久我就想通了...

MSBuild 包括 MSBuild Property Functions,可用于划分事物和执行其他操作。这是一个工作代码的例子,它可以满足我的需要:

<Version>
  $([System.DateTime]::Now.Month).
  $([System.DateTime]::Now.Day).
  $([System.DateTime]::Now.Year).
  $([System.Convert]::ToUInt16(
      $([MSBuild]::Divide(
          $([System.DateTime]::Now.TimeOfDay.TotalSeconds),
          2
      ))
  ))
</Version>