MSBuild脚本中的日期格式?

13

在我的 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'(注意1月份没有前导零)

4个回答

30

在msbuild 4中,现在您可以使用属性函数

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

所以我正在使用

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

那些格式周围的引号是反引号,而不是'


4

好东西。顺便说一句,在询问此类问题时,提及您正在使用/愿意使用哪些任务库总是一个好主意。 - Ruben Bartelink
如果这个被接受的答案实际上包含了问题的答案,那就太好了。也就是说,如何使用社区任务中的Time任务中的format参数来格式化日期,以便月份前面有前导0? - ssmith
如果你有特定的咒语,并且你聊天、要点或者邮件发送给我,我很乐意将其粘贴进去。在回答时,我个人手头没有一个可以从生产系统中提取的代码片段,我不能确定它不会误导或者不正确。 (看到你最近的博客文章,所以我相信你有一个(订阅并且也通过@CSharpFeeds看到了它))。记住,我不是@Sayed Ibrahim Hashimi,他只是为了娱乐价值而提供完整的工作测试示例 :P - Ruben Bartelink
@ssmith:由于某种原因,我在上次回复中漏掉了一个@ssmith,呃! - Ruben Bartelink

0

这是因为MSBuild仅使用字符串进行操作。您必须修改现有任务,使所有属性返回string而不是int(或它们返回的任何整数值),或创建一个单独的任务,根据您的需求格式化年、月和日。


鉴于市面上有大量的任务库,我只想指出你的评论暗示着要编写一个任务而不是找到已经存在的任务 - 我相信这不是你的本意。(如果市面上没有常见的库提供此类任务,我会使用PowerShell任务来进行微小的格式化操作) - Ruben Bartelink
@Ruben:当然!我只是找不到任何适用于MSBuild的字符串格式化任务。否则我肯定会建议使用其中之一。 - Anton Gogolev
有趣的是实际上没有这样的任务...如果被迫在这种情况下使用PowerShell任务,我很想知道大多数人是否会使用它?(我能想到的最好的例子是vdproj文件需要具有大写字母的guid,而我不知道如何找到一个任务来完成它(或生成一个大写的Guid),所以我转而使用了PS) - Ruben Bartelink

-1

这是一种简单而粗糙的方法,可以添加前导零

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接