[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

   

About these ads

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

  1. Pingback: [Spanish] Visual Studio 2010 ALM y Team Foundation Server 2010, 2008 y 2005 | El Bruno

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Conectando a %s