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); } } } }