在 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>
这样做的目的是将构建版本设置为构建日期的时间戳。我使用 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>