Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Fathi Bellahcene

.Net m'a tuer!
[Nant] Macrodef la tache indispensable!

 

J’ai la chance de rebosser sur un sujet qui m’a beaucoup intéressé ces dernières années a savoir l’intégration continue (ou plutôt dans mon cas actuel : de la build tout court Sourire ).

Et lorsque l’on compile quelque chose d’un peu plus compliqué qu’un projet “hello word”, l’outil incontournable c’est NAnt. Pas besoin de vous faire un long discours dessus, si vous êtes un peu sensible au sujet, vous connaissez certainement NAnt!

le truc vraiment cool avec NAnt, c’est la facilité avec laquelle on peut ajouter des bouts de script custom dans le language que l’on souhaite, on peu:

  • créer un “target” custom directement NAnt,
  • créer une “task” en C#,
  • créer des fonction en C# directement dans le script ou bien dans une dll écrite en C#.

Ainsi, on a la liberté de choisir le langage le mieux adaptés à ce que l’on souhaite faire. Par exemple:

  • les opérations sur les string sont plus simples en C#, on va ainsi écrire des fonctions en C# et les utiliser en NAnt,
  • par contre, tout ce qui concerne la manipulation de fichiers est plus simple en NAnt, on va donc privilégier du NAnt.

Mais, il y a tout de même quelque chose qui manque dans NAnt: lorsque vous créer des “target”, vous n’avez pas la possibilité de définir des paramètres (comme pour une méthode) et dans ce cas, vous faites souvent un truc comme ca:

<?xml version="1.0"?>
<project name="NAnt Examples" default="main">    
    <target name="main">
        <loadtasks assembly="D:\nant\sandBox\MacroDef.dll" />
        <property name="message" value="Hello" />
        <call target="printMsg"/>
        
        <property name="message" value="Word" />
        <call target="printMsg"/>
    </target>

    <target name="printMsg">
        <echo message="${message}" />
    </target>
</project>

lorsque l’on execute NAnt, on a le résultat suivant:

image

on définit une variable (message) que l’on utilise dans la target chargé d'effectuer le traitement (un simple print)…bref c’est moche.

MacroDef permet de faire la même chose de manière élégante. On va définir un “macro” qui effectue le même traitement et qui défini un paramètre d’entré à notre taret:

<?xml version="1.0"?>
<project name="NAnt Examples" default="main">
    <!--Load macro def asm-->
    <loadtasks assembly="D:\nant\sandBox\Macrodef.dll" />
    
    <target name="main">
        <macroMsg msg="Hello" />
        <macroMsg msg="Word" />
    </target>
    
    <macrodef name="macroMsg">
    <!--Parameters definition-->
        <attributes>
            <attribute name="msg"/>
        </attributes>
    <!--Core-->
        <sequential>
            <echo message="${msg}" />
        </sequential>
    </macrodef>
    
</project>

 

la macro possède les élements suivants:

  • un nom (name) de macro (qui sera utilisé lors de l’appel)
  • des paramètres (attributes) , une fois définis, ils sont obligatoires
  • un traitement que l’on écris en NAnt à l’intérieur des balises sequential.

les appels sont plus clair et propre (pas d’utilisation de paramètres globaux):

<macroMsg msg="Hello" />
<macroMsg msg="Word" />

Le résultat:

image

have fun!

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mercredi 23 février 2011 22:53 par fathi

Commentaires

JeremyJeanson a dit :

Merci pour l'info, ça fait un bou de temps que je n'avais pas ouvert la documentation de NAnt

# février 24, 2011 10:22

Graveen a dit :

Salut Fathi,

Comment tu positionnes NAnt par rapport à MsBuild + MSBuild Community Tasks en terme de souplesse, de puissance ?

Perso, j'était NAnt, mais je suis passé à MSB + MSB/CT; ca répond trés bien à mes besoins, et j'ai du mal à voir si NAnt va (beaucoup) plus loin ou si c'est juste un outil similaire.

# février 24, 2011 11:19

fathi a dit :

@Jeremy -&gt; de rien! ca sert a ca un blog

@Graveen :

Je ne suis pas un grand spécialiste et mon avis n’est surement pas le meilleur…mais je le donne tout de même.

Je préfere Nant pour les raisons suivantes :

-&gt;Il est plus vieux donc à une plus grande communauté

-&gt;Il est fiable : il est très répendu et perso, je l’ai vu builder des trucs vraiment balèze (des builds de plus de trois heures)

&gt;  Il est plus lisible et a un fonctionnement plus rationnel (une instance de Nant qui lance les tâches et pas MsBuild qui relance MsBuild…)

&gt;  pratiquement tout les outils liées à de l’intégration continue (les contrôleurs de code sources, les outils de tests, de QCM, de documentation…) fournissent en générale des tâches Nant pour les faires fonctionner depuis Nant.

MsBuild a aussi quelques arguments :

&gt; Il est intégré à VS

&gt; La possibilité de faire de l’override de tâche (ca c’est vraiment cool)

&gt; Et depuis 2010 l’utilisation de WF (si je dit pas de bêtise)

&gt; Le parallélisme.

Les points communs :

&gt;  C’est du script basé sur une syntaxe xml

&gt; La possibilité de faire des tâches custom en C#

En bref, je ne pense pas qu’il y a un gros écart entre les deux technos (mais je me trompe peut être). La question qui se pose donc est pourquoi changer pour un truc équivalent ?

# février 24, 2011 22:17
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Installer un site ASP.net 32bits sur un serveur exécutant SharePoint 2013 par Blog de Jérémy Jeanson le il y a 5 heures et 1 minutes

- [ SharePoint Summit 2014 ] Tests de montée en charge SharePoint par Le blog de Patrick [MVP SharePoint] le il y a 14 heures et 50 minutes

- [ SharePoint Summit 2014 ] Bâtir un site web public avec Office 365 par Le blog de Patrick [MVP SharePoint] le il y a 17 heures et 5 minutes

- Kinect + Speech Recognition + Eedomus = Dommy par Aurélien GALTIER le il y a 18 heures et 18 minutes

- [ SharePoint Summit 2014 ] Une méthodologie simple pour concevoir vos applications OOTB SharePoint de A à Z par Le blog de Patrick [MVP SharePoint] le il y a 18 heures et 44 minutes

- //Lean/ - Apprendre à faire des Apps Windows universelles par Blog de Jérémy Jeanson le il y a 22 heures et 38 minutes

- Une culture de la donnée pour tous… par Le blog de Patrick [MVP SharePoint] le 04-16-2014, 11:00

- [ SharePoint Summit 2014 ] L’utilisation de SharePoint 2013 pour la mise en place d’un site Internet Grand Public par Le blog de Patrick [MVP SharePoint] le 04-15-2014, 20:51

- [ SharePoint Summit Montréal 2014 ] Mes présentations sont en ligne par Le blog de Patrick [MVP SharePoint] le 04-15-2014, 18:16

- [ SharePoint Summit Montréal 2014 ] L'intelligence d'affaire dans O365 : enfin facile et économique grâce aux dernières évolution de la Power BI par Le blog de Patrick [MVP SharePoint] le 04-15-2014, 17:07