Ya les conté someramente qué es NAnt, ahora…¿qué es AjGenesis?…AjGenesis es un generador de artefactos de texto de código abierto.  Para más información dirigirse a http://www.ajlopez.com/ajgenesis

Puede bajarse el generador, desde AjGenesis-0.5, ejemplos desde AjGenesisExamples.zip, más ejemplos en AjGenesisExamples3.zip, documentación en http://www.ajlopez.net/ajgenesis/documentation.php

AjGenesis se basa en un modelo soportado en XML y plantillas.Para utilizar este generador sólo hay que descargarlo y descomprimirlo en una carpeta.

AjGenesis funciona con el Framework 1.1 en adelante, nosotros vamos a necesitar la versión 2.0 que es el que corresponde a Visual Studio 2005. Tambien hay que tener instalado NAnt 0.85La idea es, mediante NAnt, ejecutar Tareas de AjGenesis en un orden que puede definirse. En algunos casos serán comandos NAnt (por ejemplo, crear o eliminar carpetas, archivos, etc.) y en otros archivos de lotes .ajg donde se define, por medio de los templates, que hacer con el modelo (los archivos XML), en sintaxis AjBasic, por ejemplo: 

TransformerManager.Transform(«Templates/VbNet2/EntityVb.tpl»,»${Project.BuildDir}/Src/${Project.Name}.Entities/${Entity.Name}.vb»,Environment) 

En esta linea se está aplicando la plantilla EntityVb.tpl a la entidad que se soportará en un archivo cuya ubicación y nombre resulte de  

 ${Project.BuildDir}/Src/${Project.Name}.Entities/${Entity.Name}.vb 

dónde;

${Project.BuildDir} es la carpeta en la que se guarda el código autogenerado, se define en NAnt, en el archivo .build,  

${Project.Name} se define en el archivo Project.xml, es el archivo raiz del modelo de datos y

${Entity.Name} se define en el archivo XML del mismo nombre, descriptor de la entidad. 

Una vez copiados NAnt y AjGenesis como se describe anteriormente, para asegurarse que todo funciona correctamente es conveniente ejecutar un ejemplo de los que Ángel Lopez nos deja.

Obviamente ejecutaremos alguna variante de Hello World

Para verificar la instalación de NAnt abramos una ventana de línea de comandos y tipeamos NAnt y Enter, como no va a encontrar ningún archivo .build mostrará lo siguiente: 

NAnt 0.85 (Build 0.85.2478.0; release; 14/10/2006)

Copyright (C) 2001-2006 Gerry Shaw

http://nant.sourceforge.net  

BUILD FAILED 

Could not find a ‘*.build’ file in ‘C:\…….’ 

For more information regarding the cause of the build failure, run the build again in debug mode. 

Try ‘nant -help’ for more information 

Ahora verifiquemos que funcione AjGenesis.

Supongamos que ya bajamos el archivo AjGenesis-0.5.zip, lo descomprimimos y lo copiamos en C:\Lab\AjLopez\AjGenesis-0.5, también descomprimimos los archivos AjGenesisExamples.zip y AjGenesisExamples3.zip dentro de C:\Lab\AjLopez\AjGenesis-0.5\examples, los nombres de las carpetas que doy son arbitrarios, si los querés modificar sólo tendrías que tener en cuenta de modificar los valores en el archivo .build de NAnt, en las tareas .ajg y en los templates .tpl

Busquemos el ejemplo HelloWorldNAnt, en su carpeta encontraremos un archivo de nombre default.build, este es el archivo NAnt con el siguiente contenido: 

<?xml version=»1.0″?><project name=»Example 1″ default=»build»>

    <property name=»src.dir» value=».»/>

    <property name=»build.dir» value=»${src.dir}/Build»/>

    <property name=»templates.dir» value=»${src.dir}/Templates»/>

    <property name=»models.dir» value=»${src.dir}/Models»/>

    <property name=»tasks.dir» value=»${src.dir}/Tasks»/>

    <property name=»ajgenesis.dir» value=»${src.dir}/../..»/>

    <property name=»nanttasks.dir» value=»${ajgenesis.dir}/bin»/>

       <target name=»clean» description=»cleans build directory»>

            <delete dir=»${build.dir}» verbose=»true» if=»${directory::exists(build.dir)}» />

       </target>

       <target name=»loadtasks» description=»loads AjGenesis tasks»>

            <loadtasks assembly=»${nanttasks.dir}/AjGenesis.NAnt.dll» />

       </target>

       <target name=»init» depends=»loadtasks» description=»init the AjGenesis model, create build directory»>

            <mkdir dir=»${build.dir}»/>

            <loadmodel model=»${models.dir}/Project.xml»/>

      </target>

     <target name=»build» depends=»init»>

            <executetask task=»${tasks.dir}/Build.ajg»/>

    </target>

</project> 

Vemos un archivo XML, en los primeros tags se definen variables que contienen la rutas de algunas carpetas que se irán utilizando más adelante:

src.dir es la carpeta raiz,

build.dir es dónde se aloja el código autogenerado,

templates.dir es dónde el generador encuentra sus plantillas,

models.dir contiene los archivos XML que definen el modelo,

tasks.dir acá encontramos los archivos .ajg que definen las tareas,

ajgenesis.dir es la carpeta dónde se encuentra el generador de código, revisar bien esta definición,

nanttask.dir contiene las dll’s de AjGenesis que trabajan con NAnt.

A continuación hay cuatro nodos target, cada uno representa una tarea en NAnt, básicamente tiene un atributo name, con el nombre, que es obligatorio, description es opcional y depends, que lo encontramos en el último tag target, indica que esta tarea no se ejecutará hasta que se finalice init.

Volvamos a la ventana de linea de comandos que ya teníamos abierta, ubiquémonos en la carpeta que contiene el archivo default.build del ejemplo HelloWorldNAnt, una vez posicionados en esta carpeta tipeamos NAnt y Enter, si todo anda bien, veremos lo siguiente: 

C:\Lab\AjLopez\AjGenesis-0.5\examples\HelloWorldNAnt>NAnt

NAnt 0.85 (Build 0.85.2478.0; release; 14/10/2006)

Copyright (C) 2001-2006 Gerry Shaw

http://nant.sourceforge.net

Buildfile: C:/Lab/AjLopez/AjGenesis-0.5/examples/HelloWorldNAnt/default.build

Target framework: Microsoft .NET Framework 2.0

Target(s) specified: build  

loadtasks: 

[loadtasks] Scanning assembly «AjGenesis.NAnt» for extensions. 

init:  

build: 

Generating Solution HelloWorld

Creating Directories

Creating Solution File

Creating VB.Net Project

Creating C# Project 

BUILD SUCCEEDED 

Total time: 0.4 seconds. 

Al ejecutar NAnt, este busca en la misma carpeta un archivo con extensión build, si lo encuentra lo ejecuta, si no, da el error que vimos anteriormente.Si vamos a ver en la carpeta C:\Lab\AjLopez\AjGenesis-0.5\examples\HelloWorldNAnt\Build veremos que hay una carpeta de nombre HelloWorld que contiene la solución y dos carpetas que contienen sendos proyectos uno en C# y otro en VB. 

Si funcionó, a festejar, sino escribime y vemos cómo te puedo ayudar. 🙂