public void Alter(TemplatePlan plan) { // Hokey. _substitutions.Set(TemplatePlan.INSTRUCTIONS, plan.GetInstructions()); plan.Logger.StartProject(_alterations.Count); plan.StartProject(this); _substitutions.Trace(plan.Logger); var reference = plan.Solution.FindProject(_projectName); if (reference == null) { if (ProjectTemplateFile.IsEmpty()) { plan.Logger.Trace("Creating project {0} from the default template", _projectName); reference = plan.Solution.AddProject(_projectName); } else { plan.Logger.Trace("Creating project {0} from template at {1}", _projectName, ProjectTemplateFile); reference = plan.Solution.AddProjectFromTemplate(_projectName, ProjectTemplateFile); } reference.Project.AssemblyName = reference.Project.RootNamespace = ProjectName; if (DotNetVersion != null) { reference.Project.DotNetVersion = DotNetVersion; } } var projectDirectory = reference.Project.ProjectDirectory; plan.FileSystem.CreateDirectory(projectDirectory); _relativePath = reference.Project.FileName.PathRelativeTo(plan.Root).Replace("\\", "/"); _substitutions.Set(PROJECT_PATH, _relativePath); _substitutions.Set(PROJECT_FOLDER, _relativePath.Split('/').Reverse().Skip(1).Reverse().Join("/")); _alterations.Each(x => { plan.Logger.TraceAlteration(ApplySubstitutions(x.ToString())); x.Alter(reference.Project, this); }); Substitutions.WriteTo(projectDirectory.AppendPath(Substitutions.ConfigFile)); plan.Logger.EndProject(); }