Формат даты в msbuild script?

В моем msbuild script Я создаю zip файл с годом/месяцем/днем ​​в zip файле, но месяц и день всегда записываются без начального нуля.

Есть ли способ добавить ведущий ноль к моему имени файла zip?

<Time>
  <Output TaskParameter="Year" PropertyName="Year" />
  <Output TaskParameter="Month" PropertyName="Month" />
  <Output TaskParameter="Day" PropertyName="Day" />
</Time>

<PropertyGroup>
  <ZipOutDir>C:\output</ZipOutDir>
  <ZipFileName>Application_$(Year)$(Month)$(Day).zip</ZipFileName>
</PropertyGroup>

И результат: "Application_2010122.zip" (без начального нуля для января, как вы можете видеть)

Ответ 2

В msbuild 4 вы можете теперь

$([Namespace.Type]::Method(..parameters…))
$([Namespace.Type]::Property)
$([Namespace.Type]::set_Property(value))

поэтому я использую

$([System.DateTime]::Now.ToString(`yyyy.MMdd`))

эти тики вокруг формата являются обратными выражениями '

Ответ 3

Это потому, что MSBuild работает исключительно со строками. Вам придется либо изменить существующие задачи, чтобы все свойства вернули string вместо int (или любое другое целочисленное значение, которое они возвращают), либо создайте отдельную задачу, которая будет форматировать год, месяц и день в соответствии с вашими потребностями.

Ответ 4

Здесь дешевый и грязный способ добавить начальный нуль

$([System.UInt16]::Parse($(Month)).ToString('00'))