public override bool Execute()
        {
            Logger.PushPrefix("CopyImagesBuildStep.Execute() ");

            if (String.IsNullOrWhiteSpace(Settings.ImagesDirectory))
            {
                Logger.Msg("ImagesDirectory is not set. Exiting.");
                return(true);
            }

            int numFilesCopied  = 0;
            int numFilesIgnored = 0;

            foreach (var filename in FileSystem.EnumerateFiles(Settings.ImagesDirectory, "*", SearchOption.AllDirectories))
            {
                if (!FileFilter.ShouldProcessFile(filename))
                {
                    numFilesIgnored++;
                    continue;
                }

                string child       = PathUtils.GetSubPath(Settings.ImagesDirectory, filename);
                string destination = Path.Combine(Settings.OutputDirectory, child);
                Logger.Msg("Copying {0} to {1}", filename, destination);
                byte[] data = FileSystem.ReadAllBytes(filename);
                FileSystem.WriteAllBytes(destination, data);
                numFilesCopied++;
            }
            Logger.Msg("Copied {0} files, ignored {1}.", numFilesCopied, numFilesIgnored);
            Logger.PopPrefix();
            return(true);
        }