9 de noviembre de 2007

MSBuild, lo nuevo de Delphi 2007 for Win32

Delphi 2007 for Win32 viene ahora con MSBuild para la administración de proyectos. Esta herramienta nos ayudará a simplificar el manejo de grandes proyectos, revitalizando de ésta manera el desarrollo en Win32.

Introducción

Delphi 2007 for Win32 utiliza MSBuild para la administración de proyectos al crear o al actualizar aplicaciones desde versiones anteriores. En nuestro análisis sobre la funcionalidad de MSBuild en nuestros proyectos, migraremos una aplicación muy simple que calcula el dígito verificador de un número NIF tomando como parámetro un número de DNI.

Migrando la aplicación

Bien, para iniciar la migración cargamos Delphi 2007. En el menú File seleccionamos Open Project, notaremos que una nueva ventana de diálogo al estilo Windows Vista nos permite especificar la ubicación del proyecto.


Seleccionamos el archivo NIF.bds y presionamos el botón Abrir. Delphi 2007 for Win32, comienza ahora la migración automática de nuestra aplicación.

Examinando el nuevo Archivo de proyecto (*.dproj )

Una vez que la migración ha terminado, Delphi 2007 ha creado un nuevo archivo con extensión *.dproj.

Este nuevo archivo llamado NIF.dproj es un nuevo formato de archivo de proyecto basado en código XML. Aquí se guardará información referida al proyecto como: la personalidad de Delphi usada al crear la aplicación, información sobre el proyecto, etc. Para comprender su uso es necesario conocer algunos de los elementos básicos del formato de archivo de proyecto de MSBuild que resumo a continuación.

Elementos
Los elementos son entradas en el sistema de generación y se agrupan en colecciones de elementos basadas en los nombres de colección definidos por el usuario. Estas colecciones de elementos se pueden utilizar como parámetros para tareas, las cuales utilizan elementos individuales incluidos en la colección para llevar a cabo los pasos del proceso de generación.

Los elementos se declaran en el archivo de proyecto creando un elemento con el nombre de la colección de elementos como elemento secundario de un elemento ItemGroup. El código siguiente crea una colección de elementos de nombre Compile que incluye dos archivos.

En nuestra aplicación recientemente migrada, el código siguiente crea dos colecciones de elementos con nombres DelphiCompile y DCCReference que incluyen un archivo cada uno respectivamente: NIF.dpr y Unit1.pas.

Propiedades
Las propiedades representan pares clave=valor que se usan para configurar generaciones. Las diferencias entre los elementos y las propiedades son:

  • Los elementos se almacenan en colecciones, mientras que las propiedades contienen un valor escalar único.
  • Los elementos no se pueden quitar de las colecciones de elementos, mientras que se puede modificar el valor de las propiedades una vez definido.
  • Los elementos pueden contener metadatos y utilizar la notación %(ItemMetadata), mientras que las propiedades no pueden.

Las propiedades se declaran creando un elemento con el nombre de la propiedad como elemento secundario de un elemento PropertyGroup. Como ejemplo, el código siguiente crea una propiedad denominada BuildDir con un valor de Build.

A continuación, las propiedades declaradas en el archivo NIF.dproj. Note los tres elementos PropertyGroup y sus respectivas propiedades existentes en el archivo de proyecto.

Note que las configuraciones se representan en los proyectos de MSBuild mediante propiedades agrupadas en un elemento PropertyGroup que contiene un atributo Condition. Delphi 2007 examinará estas condiciones para crear una lista de las configuraciones y plataformas del proyecto que se va a mostrar, por ejemplo

TareasLas tareas son unidades reutilizables de código ejecutable usadas por proyectos de MSBuild para realizar operaciones de generación. Para poner un ejemplo, una tarea podría compilar archivos de entrada o ejecutar una herramienta externa. Una vez creadas, las tareas las pueden compartir y reutilizar desarrolladores diferentes en distintos proyectos.
En el ejemplo, el código mostrado llama a la tarea MakeDir y le envía el valor de la propiedad BuildDir.

Destinos
Los destinos agrupan tareas en un orden particular y exponen secciones del archivo de proyecto como puntos de entrada en el proceso de generación. Los destinos se agrupan a menudo en secciones lógicas para permitir la expansión y aumentar la legibilidad. Dividir los pasos de generación en muchos destinos permite llamar a una parte del proceso de generación desde otros destinos sin necesidad de copiar dicha sección de código en cada destino.

Los destinos se declaran en el archivo de proyecto con el elemento Target. Por ejemplo, en el ejemplo de código siguiente se crea un destino denominado Compile que, a continuación, llama a la tarea Cdc con la colección de elementos declarada en el ejemplo anterior.

Recuerde, la configuración del proyecto que se agrega y modifica mediante Delphi se refleja en el archivo *.dproj, y ésta es generada para cada proyecto.

Probando la aplicación

Regresando al IDE de Delphi 2007 for Win32, veremos que la aplicación ha sido migrada completamente, sin necesidad de intervenir en el proceso. Notaremos también que nuestra aplicación, así como el mismo Delphi, ahora soportan la nueva interfase AERO de Windows Vista. Compilamos el proyecto en Project->Compile NIF.

Y por último ejecutamos la aplicación (presionamos F9). En la ventana de la aplicación digitamos un número de DNI y presionamos Aceptar, el programa mostrará el dígito verificador correspondiente.

Conclusión

Para terminar, el nuevo formato de archivo de proyecto de MSBuild nos permite describir completamente qué elementos se han de generar y cómo han de generarse sobre distintas plataformas y configuraciones. MSBuild utiliza un mecanismo extensible para describir los pasos de una generación. Utilizando MSBuild tenemos en las manos la posibilidad de crear un sistema propio de generación mediante tareas personalizadas escritas en formato XML.

También puedes leer el artículo en: MSBuild, lo nuevo de Delphi 2007 for Win32.

** José Castillo, escribe artículos técnicos sobre Delphi para Danysoft Servicios Profesionales.

1 comentario:

Anónimo dijo...

hola jose solo comentar que delphi esta ganando mucho terreno y que me ha servido super bien lalo