private async Task DoBuildRecursive(IFolder currentSourceFolder, IFolder currentOutputFolder)
        {
            // Process files in the child folders
            List <IFolder> childSourceFolders = await currentSourceFolder.GetChildFoldersAsync();

            if (childSourceFolders != null)
            {
                foreach (IFolder childSourceFolder in childSourceFolders)
                {
                    // Does the corresponding child output folder exist?
                    IFolder childOutputFolder = await currentOutputFolder.GetChildFolderAsync(childSourceFolder.Name);

                    if (childOutputFolder == null)
                    {
                        // No corresponding child folder in the output folder so create one
                        childOutputFolder = await currentOutputFolder.CreateChildFolder(childSourceFolder.Name);
                    }

                    // Build the child folder
                    await this.DoBuildRecursive(childSourceFolder, childOutputFolder);
                }
            }

            // Process the files in this folder
            List <IFile> files = await currentSourceFolder.GetFilesAsync();

            if (files != null)
            {
                foreach (IFile file in files)
                {
                    if (file.Name.EndsWith(".html", StringComparison.OrdinalIgnoreCase))
                    {
                        // Load html file and do injection as required
                        await this.ProcessHtmlFile(file, currentOutputFolder);
                    }
                    else if (!file.Name.EndsWith(".template", StringComparison.OrdinalIgnoreCase))
                    {
                        // Copy file to the output folder
                        await currentOutputFolder.CopyFileHere(file);
                    }
                }
            }
        }