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 response to “[TEAMBUILD2010] HowTo: Copiar un directorio completo en una actividad de una Build”

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

    Like

Leave a comment

Discover more from El Bruno

Subscribe now to keep reading and get access to the full archive.

Continue reading