Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Target e dipendenze

Raggruppare azioni e stabilire le dipendenze
Raggruppare azioni e stabilire le dipendenze
Link copiato negli appunti

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.


Ti consigliamo anche