Как я могу вычесть две даты в 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 работать. Ошибка, которую это дает:

Выражение "([System.DateTime]::UtcNow - [System.DateTime]::UtcNow.Date).TotalSeconds" не может быть оценено.

Я подозреваю, что проблема связана либо со знаком минус, либо с дополнительными скобками, но у меня возникают проблемы с поиском правильного способа написания этой операции.

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>
Другие вопросы по тегам