2010-01-22 18 views
10

Nel mio script msbuild sto creando un file zip con anno/mese/giorno nel nome file zip, ma il mese e il giorno vengono sempre scritti senza zero iniziale.formato data nello script msbuild?

C'è un modo per aggiungere zero iniziale al mio nome file 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> 

E il risultato è: 'Application_2010122.zip' (senza zero iniziale per gennaio, come si può vedere)

risposta

4

Si potrebbe utilizzare l'estensione MSBuild confezionare a la:

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

Oppure utilizzare il parametro format al compito Tempo da compiti della comunità [che sembrano essere utilizzando]

MSBuild MSBuildCommunityTasks Task Time

+0

Grazie ... Ho già trovato il link successivo e l'ho usato. – Goran

+0

Roba buona. BTW È sempre una buona idea menzionare quali librerie di attività si stanno utilizzando/si aprono all'utilizzo quando si fanno domande di questo tipo. –

+0

Sarebbe bello se questa risposta accettata avesse effettivamente la risposta alla domanda aggiunta. Cioè, come, usando il parametro format nell'attività Time dalle attività della comunità, si formatta la data in modo tale che ci siano degli 0 iniziali nei mesi? – ssmith

0

È perché MSBuild funziona esclusivamente con stringhe. È necessario modificare le attività esistenti in modo che tutte le proprietà restituiscano string s anziché int s (o qualsiasi valore intero restituito) o creare un'attività separata che formatta l'anno, il mese e il giorno in base alle proprie esigenze.

+0

Data la quantità di librerie di compiti là fuori, volevo solo sottolineare che il tuo commento suggerisce di scrivere un compito invece di trovarne uno che già lo fa - sono sicuro che non lo intendevi. (E userei un task PowerShell per fare piccoli hack di formattazione come questo se una delle librerie più comuni là fuori non avesse già un compito per questo) –

+0

@Ruben: Certo! Non sono riuscito a trovare alcuna attività di formattazione delle stringhe per MSBuild. Altrimenti avrei sicuramente suggerito di usare uno di quelli. –

+0

Interessante che non ce n'è uno in realtà ... Sarei interessato a sapere se la maggior parte delle persone usa un compito di PowerShell se messo alle strette su qualcosa di simile? (Il migliore esempio che riesco a pensare è che i file vdproj hanno bisogno di guids con lettere maiuscole e ho fatto ricorso a PS per fare un ToUpper perché non riuscivo a trovare un Task per farlo (o produrre un Guid captializzato)) –

25

In msbuild 4 you can now

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

così io sto usando

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

quelle zecche in tutto il formato sono apici inversi non '

-1

Ecco un modo economico e sporco per aggiungere uno zero

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