Hi folks,
Heres the source for the task performer I wrote that copies a directory to the project output.
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
using SD.LLBLGen.Pro.ApplicationCore;
using SD.LLBLGen.Pro.GeneratorCore;
namespace OAMPS.TaskPerformers
{
public class DirectoryCopier : TaskPerformerBase
{
bool result = false;
public override void Perform(SD.LLBLGen.Pro.ApplicationCore.IGenerator executingGenerator, SD.LLBLGen.Pro.ApplicationCore.ITask taskDefinition, Dictionary<string, SD.LLBLGen.Pro.ApplicationCore.Tasks.TaskParameter> parameters)
{
if (parameters == null)
{
throw new GeneratorAbortException("No parameters have been specified. Aborting generator.", taskDefinition);
}
if (parameters.Count <= 0)
{
throw new GeneratorAbortException("No parameters have been specified. Aborting generator.", taskDefinition);
}
if (!parameters.ContainsKey("folderToCopy"))
{
throw new GeneratorAbortException("Mandatory parameter 'folderToCopy' not found. Aborting generator.", taskDefinition);
}
if (!parameters.ContainsKey("outputPath"))
{
throw new GeneratorAbortException("Mandatory parameter 'outputPath' not found. Aborting generator.", taskDefinition);
}
string folderToCopy = parameters["folderToCopy"].Value;
string outputPath = parameters["outputPath"].Value;
outputPath = Path.Combine(executingGenerator.ProjectDefinition.DestinationFolder, outputPath);
bool failWhenExistant = false;
if (parameters.ContainsKey("failWhenExistent"))
failWhenExistant = parameters["failWhenExistent"].Value.ToLower(CultureInfo.InvariantCulture) == "true";
if (Directory.Exists(outputPath) && failWhenExistant)
throw new GeneratorAbortException("Folder '" + outputPath + "' already exists and 'failWhenExistent' is set true. Aborting generator.", taskDefinition);
CopyDirectory(folderToCopy, outputPath);
result = true;
}
public static void CopyDirectory(String src, String dest)
{
DirectoryInfo di = new DirectoryInfo(src);
foreach (FileSystemInfo fsi in di.GetFileSystemInfos())
{
String destName = Path.Combine(dest, fsi.Name);
if (fsi is FileInfo)
File.Copy(fsi.FullName, destName, true);
else
{
Directory.CreateDirectory(destName);
CopyDirectory(fsi.FullName, destName);
}
}
}
public override void Perform(SD.LLBLGen.Pro.ApplicationCore.IGenerator executingGenerator, SD.LLBLGen.Pro.ApplicationCore.ITask taskDefinition)
{
throw new GeneratorAbortException("No parameters have been specified. Aborting generator.", taskDefinition);
}
public override bool PerformResult
{
get { return result; }
}
}
}
Note to build u'll need a reference to SD.LLBLGen.Pro.ApplicationCore and SD.LLBLGen.Pro.GeneratorCore.
Put this in your tasks file:
<taskGroup name="Copy Project Template">
<task name="Copy Project Template Folder Tree" assemblyFilename="OAMPS.TaskPerformers.dll" taskPerformerClass="OAMPS.TaskPerformers.DirectoryCopier">
<parameters>
<parameter name="folderToCopy" isOptional="false" description="The folder to copy." />
<parameter name="outputPath" defaultValue="WebUI" isOptional="false" description="The path to copy the folder to." />
<parameter name="failWhenExistent" defaultValue="false" isOptional="true" description="Flag to signal what to do when the folder already exists. Overrules clearWhenExistent" valueType="boolean"/>
</parameters>
</task>
</taskGroup>