Il secondo miglioramento è nell'uso del task <target> di importanza fondamentale in Nant. Un target infatti non è altro che un gruppo di task da eseguire sequenzialmente, in questo modo si possono raggruppare azioni logicamente correlate.
<target name="build.setup">
<mkdir dir="${path.build}"/>
</target>
Il target precedente ad esempio crea la directory in cui compilare il progetto, ma si possono costruire task ben più interessanti.
<target name="project.setup">
<fileset id="project.sourcefile" >
<include name="${path.src}/**/*.cs" />
<exclude name="${path.src}/obj/**/*.cs" />
<exclude name="${path.src}/bin/**/*.cs" />
</fileset>
<resourcefileset id="project.resourcefile" dynamicprefix="true" >
<include name="${path.src}/**/*.resx" />
<exclude name="${path.src}/obj/**/*.resx" />
<exclude name="${path.src}/bin/**/*.resx" />
</resourcefileset>
</target>
Il target project.setup esegue una serie di operazioni preliminari alla compilazione, in questo caso vengono creati dei <fileset>: insiemi di file che possono poi essere usati in punti successivi dello script.
Grazie alle opzioni <include> ed <exclude> è possibile utilizzare wildcard per selezionare gruppi di file, la sintassi prevede anche il doppio asterisco (**) che indica un qualsiasi numero di sottodirectory.
Il fileset project.sourcefile raggruppa quindi tutti i file con estensione cs che si trovano all'interno del progetto, ma al di fuori delle cartelle obj e bin che non fanno parte del progetto stesso.
Per i file di risorse si utilizza invece un resourcefileset la cui unica differenza è supportare attributi tipici delle risorse; come il dynamicprefix utilizzato per dare alle risorse il prefisso corretto con il nome del progetto.
Per i file di risorse si utilizza invece un resourcefileset la cui unica differenza è supportare attributi tipici delle risorse; come il dynamicprefix utilizzato per dare alle risorse il prefisso corretto con il nome del progetto.
Il target di compilazione è ora molto più interessante.
<target name="compile-winform" depends="build.setup, project.setup">
<csc target="winexe"
debug="Enable"
optimize="false"
warnaserror="false"
output="${path.build}/${project.name}.exe"
doc="${path.build}/${project.name}.xml"
rebuild="true">
<resources refid="project.resourcefile" />
<sources refid="project.sourcefile" />
</csc>
</target>
L'aspetto fondamentale da sottolineare è l'attributo depends che indica a Nant una dipendenza. Quando Nant arriva ad eseguire questo target, esegue in ordine tutti i target da cui dipende, se non sono già stati precedentemente eseguiti. Per script molto complessi è possibile che le catene di dipendenze siano assai complicate, ma in ogni caso nessun target viene eseguito più di una volta.
Il secondo dato importante è che ora, grazie all'uso dei <fileset>, il target <csc> non contiene più nessun riferimento a proprietà specifiche del progetto e può quindi essere riutilizzato. Sempre grazie ai fileset, non è necessario inoltre modificare alcunché quando si aggiungono file sorgenti al progetto stesso.
Se vuoi aggiornamenti su .NET inserisci la tua email nel box qui sotto: