Date msbuild脚本中的日期格式?

Date msbuild脚本中的日期格式?,date,msbuild,scripting,msbuild-task,msbuildcommunitytasks,Date,Msbuild,Scripting,Msbuild Task,Msbuildcommunitytasks,在我的msbuild脚本中,我正在创建一个zip文件,zip文件名中包含year/month/day,但月和日总是不带前导零 有没有办法将前导零添加到我的zip文件名中 <Time> <Output TaskParameter="Year" PropertyName="Year" /> <Output TaskParameter="Month" PropertyName="Month" /> <Output TaskParameter="Da

在我的msbuild脚本中,我正在创建一个zip文件,zip文件名中包含year/month/day,但月和日总是不带前导零

有没有办法将前导零添加到我的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>

C:\输出
申请书$(年)$(月)$(日).zip

结果是:“Application_2010122.zip”(如您所见,1月份没有前导零)

您可以使用MSBuild扩展包a la:

或者使用format param从community tasks[您似乎正在使用]


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

所以我用

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

格式周围的那些记号是反记号而不是

这里有一种廉价而肮脏的方法来添加前导零

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

考虑到任务库的数量,我想指出的是,你的评论建议写一个任务,而不是找到一个已经完成的任务——我相信你不是有意的。(如果我发现一个普通的lib还没有任务的话,我会用PowerShell任务来做这样的小格式化黑客)@Ruben:当然!我只是找不到MSBuild的任何字符串格式化任务。否则我肯定会建议使用其中一个。有趣的是,实际上没有一个。。。我很想知道,如果陷入这样的困境,大多数人是否会使用PowerShell任务?(我能想到的最好的例子是vdproj文件需要有大写字母的Guid,我求助于PS来做一个ToUpper,因为我找不到一个任务来做它(或生成一个大写Guid))好东西。顺便说一句,在问这类问题时,最好提及你正在使用/开放使用的任务库。如果这个被接受的答案中实际添加了问题的答案,那就更好了。也就是说,如何在community tasks的Time task中使用format param来格式化日期,以便在月份中有前导0?如果您手头有特定的咒语,并且您可以聊天、要点或将其发送给我,请将其粘贴到中。答:在回答这个问题的时候,我个人没有一个片段可以从生产系统中提取出来,我可以确信在回答这个问题的时候不会有误导或错误。(看到你最近的博客文章,所以我肯定你有一篇(sub'd,也可以通过@CSharpFeeds查看)。请记住,我不是@Sayed Ibrahim Hashimi,我只会为娱乐价值提供一个完整的工作测试示例:P@ssmith:由于某种原因,我在上次的回复中省略了@ssmith,Doh!
$([System.UInt16]::Parse($(Month)).ToString('00'))