2010-01-22 10 views
10

In meinem Msbuild-Skript erstelle ich eine Zip-Datei mit Jahr/Monat/Tag im Zip-Dateinamen, aber Monat und Tag werden immer ohne führende Null geschrieben.Datumsformat in Msbuild-Skript?

Gibt es eine Möglichkeit, führende führende Null zu meinem Zip-Dateinamen hinzuzufügen?

<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> 

Und das Ergebnis ist: 'Application_2010122.zip' (ohne führende Null für Januar, wie Sie sehen können)

Antwort

4

Sie konnten die MSBuild Extension Pack a la verwenden:

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

Oder verwenden Sie das Format param auf die Zeit Aufgabe von Gemeinschaftsaufgaben [die Sie scheinen zu verwenden]

MSBuild MSBuildCommunityTasks Task Time

+0

Danke ... Ich habe den Link schon gefunden und benutzt. – Goran

+0

Gute Sachen. Übrigens, es ist immer eine gute Idee zu erwähnen, welche Aufgaben-Bibliotheken du verwendest, wenn du Fragen dieser Art stellst. –

+0

Es wäre gut, wenn diese akzeptierte Antwort tatsächlich die Antwort auf die Frage hätte. Das heißt, wie formatiert man das Datum mit dem Format param in der Aufgabe Time from community tasks, so dass es führende Nullen für die Monate gibt? – ssmith

0

Es ist, weil MSBuild ausschließlich mit Zeichenfolgen arbeitet. Sie müssen entweder vorhandene Aufgaben so ändern, dass alle Eigenschaften 0 (string) anstelle von int s (oder einen ganzzahligen zurückgegebenen Wert) zurückgeben oder eine separate Aufgabe erstellen, die Jahr, Monat und Tag nach Ihren Bedürfnissen formatiert.

+0

Angesichts der Menge an Task-Bibliotheken, wollte ich nur darauf hinweisen, dass Ihr Kommentar vorschlägt, eine Aufgabe zu schreiben, anstatt eine zu finden, die es bereits tut - ich bin sicher, dass Sie das nicht beabsichtigt haben. (Und ich würde eine PowerShell-Aufgabe verwenden, um winzige Formatierungs-Hacks wie diese zu tun, wenn ich eine der üblichen Bibliotheken dort nicht bereits eine Aufgabe dafür hatte) –

+0

@Ruben: Sicher! Ich konnte einfach keine Formatierungsaufgabe für MSBuild finden. Sonst hätte ich definitiv vorgeschlagen, eines davon zu benutzen. –

+0

Interessant, dass es eigentlich keinen gibt ... Ich wäre interessiert zu wissen, ob die meisten Leute eine PowerShell-Aufgabe verwenden, wenn sie auf so etwas in Verlegenheit geraten? (Das beste Beispiel, das mir einfällt, ist, dass vdproj-Dateien Guids mit Großbuchstaben benötigen und ich habe PS verwendet, um ein ToUpper zu erstellen, da ich keine Aufgabe dafür finden konnte (oder ein capitalized Guid erzeugen)) –

25

In msbuild 4 you can now

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

so bin ich

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

diese Zecken um das Format sind Backticks nicht '

-1

Hier ist eine billige und schmutzige Art und Weise eine führende Null

hinzufügen verwenden
$([System.UInt16]::Parse($(Month)).ToString('00'))