如何在msbuild中减去两个日期?

时间:2017-04-25 15:14:28

标签: c# msbuild

由于.net核心不支持自动版本编号,我手动尝试操作msbuild,以便根据构建日期自动生成版本号。

我有以下属性组:

<PropertyGroup>
    <CurrentDate>$([System.DateTime]::UtcNow.ToString(o))</CurrentDate>
    <SecondsSinceMidnight>$(([System.DateTime]::UtcNow - [System.DateTime]::UtcNow.Date).TotalSeconds)</SecondsSinceMidnight>
    <Version>$([System.DateTime]::UtcNow.Year).$([System.DateTime]::UtcNow.Month).$([System.DateTime]::UtcNow.Day).$(SecondsSinceMidnight)</Version>
  </PropertyGroup>

CurrentDate属性效果很好但我似乎无法让SecondsSinceMidnight工作。它给出的错误是:

  

表达式&#34;([System.DateTime] :: UtcNow - [System.DateTime] :: UtcNow.Date).TotalSeconds&#34;无法评估。

我怀疑问题是使用减号或额外的括号,但我找不到正确的方法来编写此操作。

1 个答案:

答案 0 :(得分:1)

-导致问题,可能是因为它未被识别为DateTime的实例方法。而是直接调用Subtract:

<Target Name="SubtractDates">
  <PropertyGroup>
    <SecondsSinceMidnight>$([System.DateTime]::UtcNow.Subtract($([System.DateTime]::UtcNow.Date)))</SecondsSinceMidnight>
    <Version>$([System.DateTime]::UtcNow.Year).$([System.DateTime]::UtcNow.Month).$([System.DateTime]::UtcNow.Day).$(SecondsSinceMidnight)</Version>
  </PropertyGroup>
  <Message Text="SecondsSinceMidnight=$(SecondsSinceMidnight)" />
  <Message Text="Version=$(Version)" />
</Target>