формат даты в скрипте msbuild?

В моем скрипте msbuild я создаю 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 (без нуля в начале для января, как вы можете видеть)


person Goran    schedule 22.01.2010    source источник


Ответы (4)


Вы можете использовать пакет расширений MSBuild а-ля:

http://www.msbuildextensionpack.com/help/3.5.3.0/html/9c5401ed-6f55-089e-3918-2476c186ca66.htm

Или используйте параметр формата для задачи «Время» из задач сообщества [которые вы, похоже, используете]

Время выполнения MSBuild MSBuildCommunityTasks

person Ruben Bartelink    schedule 22.01.2010
comment
Хорошая вещь. Кстати, всегда полезно указывать, какие библиотеки задач вы используете / открыты для использования, задавая вопросы подобного рода. - person Ruben Bartelink; 22.01.2010
comment
Было бы хорошо, если бы к этому принятому ответу действительно был добавлен ответ на вопрос. То есть, как с помощью параметра формата в задаче «Время» из задач сообщества отформатировать дату так, чтобы в месяцах были ведущие нули? - person ssmith; 01.02.2011
comment
Если у вас есть конкретное заклинание под рукой, и вы болтаете, пишете или отправляете его мне по почте, с удовольствием вставляю его. Пока я отвечал на него, у меня лично не было фрагмента, который можно было бы извлечь из производственной системы, который, я могу быть уверен, не будет вводить в заблуждение или быть неверным во время ответа. (Видел ваш недавний пост в блоге, поэтому я уверен, что он у вас есть (добавлен и также доступен через @CSharpFeeds)). Помните, я не @Sayed Ibrahim Hashimi, который просто приведу полный рабочий протестированный пример для развлечения: P - person Ruben Bartelink; 03.02.2011
comment
@ssmith: По какой-то причине я пропустил @ssmith в моем последнем ответе, Doh! - person Ruben Bartelink; 06.02.2011

В msbuild 4 теперь можно

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

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

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

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

person Maslow    schedule 11.07.2011

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

person Anton Gogolev    schedule 22.01.2010
comment
Учитывая количество библиотек задач, просто хотел указать, что ваш комментарий предлагает написать задачу вместо того, чтобы найти ту, которая уже выполняет это - я уверен, что вы этого не планировали. (И я бы использовал задачу PowerShell, чтобы делать крошечные хаки форматирования, подобные этому, если бы у меня в одной из распространенных библиотек еще не было задачи для этого) - person Ruben Bartelink; 22.01.2010
comment
@Ruben: Конечно! Мне просто не удалось найти задачу форматирования строк для MSBuild. В противном случае я бы определенно предложил использовать один из них. - person Anton Gogolev; 22.01.2010
comment
Интересно, что на самом деле его нет ... Мне было бы интересно узнать, использует ли большинство людей задачу PowerShell, если загнан в угол на что-то вроде этого? (Лучший пример, который я могу придумать, это то, что файлам vdproj нужны идентификаторы с заглавными буквами в них, и я обратился к PS, чтобы выполнить ToUpper, поскольку я не мог найти задачу для этого (или создать заглавный Guid)) - person Ruben Bartelink; 22.01.2010

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

$([System.UInt16]::Parse($(Month)).ToString('00'))
person DougP    schedule 31.10.2014