Découper le fichier projet de cette manière permet d'en modifier certaines sections sans affecter les autres. Par exemple, une façon de générer un projet avec des ressources consiste à placer les tâches GenerateResourceet Csc dans la même cible, par exemple :
<Target Name="Build">
<GenerateResource
Sources="alpha.resx; beta.txt"
<Output
TaskParameter="OutputResources"
ItemName="Resources"/>
</GenerateResource>
<Csc
Sources="hello.cs"
Resources="@(Resources)"
OutputAssembly="hello.exe"/>
</Target>Avec cette approche, le projet se génère comme prévu, mais la cible devient volumineuse et inflexible. Si vous souhaitiez ensuite ajouter d'autres tâches à exécuter entre GenerateResource et Csc, les rassembler toutes ensemble dans une cible rendrait le fichier projet très difficile à lire. De plus, la création de cibles de si grande taille et contenant tant de tâches rend difficile l'exécution de générations incrémentielles satisfaisantes - générations dans lesquelles seules les cibles n'ayant pas été générées avant ou les cibles n'étant pas à jour sont régénérées. Les cibles de grande taille vous empêchent également d'exécuter des cibles afin d'effectuer des tâches spécifiques. Dans l'exemple précité, il n'y a pas moyen de générer des ressources sans compilation.
Il est préférable de créer un fichier projet à l'aide de plusieurs cibles et d'exprimer explicitement les dépendances entre elles. Cette approche vous donne également la capacité d'exécuter chacune des cibles séparément et d'exécuter un plus petit jeu de tâches plutôt qu'une longue liste de tâches dans une cible à chaque génération. Dans cet exemple, chaque tâche est dans une cible séparée et l'attribut DependsOnTargets spécifie que la cible Resources doit s'exécuter avant que la cible Build puisse s'exécuter.
<Target Name="Resources">
<GenerateResource
Sources="alpha.resx; beta.txt"
<Output
TaskParameter="OutputResources"
ItemName="Resources"/>
</GenerateResource>
</Target>
<Target Name="Build" DependsOnTargets="Resources">
<Csc
Sources="hello.cs"
Resources="@(Resources)"
OutputAssembly="hello.exe"/>
</Target>