Как я могу вычесть две даты в 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>