[TEAMBUILD2010] HowTo: Copiar un directorio completo en una actividad de una Build

image47dd1de4

Buenas,

hoy toca publicar una actividad, que en sí es bastante simple, pero que nos ahorra infinidad de problemas cuando no la tenemos a mano: Directory.Copy(). Tal cual, más simple no puede ser y su propio nombre ya te da a entender lo que esperamos de la misma.

La clase que la implementa es muy simple, se basa en el siguiente código, donde lo importante son las propiedades

  • Source, define el directorio de origen a copiar
  • Target, define la ubicación del directorio de destino
  • DisplayInformation, que define si queremos mostrar información de los archivos copiados en el log de la Build
   1: using System.Activities;

   2: sing System.IO;

   3: sing Microsoft.TeamFoundation.Build.Client;

   4: sing Microsoft.TeamFoundation.Build.Workflow.Activities;

   5:  

   6: amespace ElBruno.TeamBuild.Activities

   7:  

   8:    [BuildActivity(HostEnvironmentOption.All)]

   9:    public class CopyDirectory : CodeActivity

  10:    {

  11:        [RequiredArgument]

  12:        public InArgument<string> Source { get; set; }

  13:  

  14:        [RequiredArgument]

  15:        public InArgument<string> Target { get; set; }

  16:  

  17:        [RequiredArgument]

  18:        public InArgument<bool> DisplayActionInformation { get; set; }

  19:  

  20:        protected override void Execute(CodeActivityContext context)

  21:        {

  22:            // get activity property values

  23:            var source = context.GetValue(Source);

  24:            var target = context.GetValue(Target);

  25:            var displayActionInformation = context.GetValue(DisplayActionInformation);

  26:            // copy

  27:            CopyFolder(context, source, target, displayActionInformation);

  28:        }

  29:  

  30:        static public void CopyFolder(CodeActivityContext context, string sourceFolder, string destFolder, bool displayActionInformation)

  31:        {

  32:            if (!Directory.Exists(destFolder))

  33:                Directory.CreateDirectory(destFolder);

  34:            var files = Directory.GetFiles(sourceFolder);

  35:            foreach (var file in files)

  36:                CopyFile(destFolder, file, displayActionInformation, context);

  37:            var folders = Directory.GetDirectories(sourceFolder);

  38:            foreach (var folder in folders)

  39:                CopyFolder(destFolder, displayActionInformation, context, folder);

  40:        }

  41:  

  42:        private static void CopyFolder(string destFolder, bool displayActionInformation, CodeActivityContext context, string folder)

  43:        {

  44:            var name = Path.GetFileName(folder);

  45:            if (name == null) return;

  46:            var dest = Path.Combine(destFolder, name);

  47:            var msg = string.Format(@"Copy Folder from [{0}] to [{1}]", name, dest);

  48:            context.TrackBuildMessage(msg, BuildMessageImportance.Normal);

  49:            CopyFolder(context, folder, dest, displayActionInformation);

  50:        }

  51:  

  52:        private static void CopyFile(string destFolder, string file, bool displayActionInformation, CodeActivityContext context)

  53:        {

  54:            var name = Path.GetFileName(file);

  55:            if (name == null) return;

  56:            var dest = Path.Combine(destFolder, name);

  57:            File.Copy(file, dest);

  58:            if (!displayActionInformation) return;

  59:            var msg = string.Format(@"Copy file from [{0}] to [{1}]", name, dest);

  60:            context.TrackBuildMessage(msg, BuildMessageImportance.Normal);

  61:        }

  62:    }

 

Una vez definida y compilada la actividad, agregamos la misma a la definición de la build, por ejemplo después de la ejecución de los tests unitarios, indicando como destino el directorio C:\Temp

image

Cuando ejecutamos la build, ya podremos ver en la misma, el log de archivos copiados a este directorio.

image

Para la próxima un poco sobre Intellisense y Team Build 2010.

Saludos @ Home

El Bruno

   

One thought on “[TEAMBUILD2010] HowTo: Copiar un directorio completo en una actividad de una Build

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.