public Task Create(ITemplate template, IParameterSet parameters)
        {
            ProcessParameters(parameters);
            VsTemplate tmplt           = (VsTemplate)template;
            XElement   templateContent = tmplt.VsTemplateFile.Root.Descendants().First(x => x.Name.LocalName == "TemplateContent");

            ParameterSet p = (ParameterSet)parameters;

            foreach (CustomParameter parameter in tmplt.CustomParameters)
            {
                ITemplateParameter target;
                if (p.TryGetParameter(parameter.Name, out target))
                {
                    if (!p.ParameterValues.ContainsKey(target))
                    {
                        p.ParameterValues[target] = parameter.DefaultValue;
                    }
                }
            }

            ITemplateParameter projectNameParameter;

            p.TryGetParameter("projectname", out projectNameParameter);

            Dictionary <string, string> fileMap = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);
            List <string> copyOnly = new List <string>();

            RecurseContent(templateContent, "", "", tmplt.DefaultName, parameters.ParameterValues[projectNameParameter], fileMap, copyOnly);

            VsTemplateOrchestrator o = new VsTemplateOrchestrator();

            o.Run(new VsTemplateGlobalRunSpec(parameters, fileMap, copyOnly), tmplt.SourceFile.Parent, Directory.GetCurrentDirectory());
            return(Task.FromResult(true));
        }
        private IEnumerable <ITemplate> GetTemplatesFromDir(IConfiguredTemplateSource source, ITemplateSourceFolder folder)
        {
            foreach (ITemplateSourceEntry entry in folder.Children)
            {
                if (entry.Kind == TemplateSourceEntryKind.File && entry.FullPath.EndsWith(".vstemplate"))
                {
                    VsTemplate tmp = null;
                    try
                    {
                        tmp = new VsTemplate((ITemplateSourceFile)entry, source, this);
                    }
                    catch
                    {
                    }

                    if (tmp != null)
                    {
                        yield return(tmp);
                    }
                }
                else if (entry.Kind == TemplateSourceEntryKind.Folder)
                {
                    foreach (ITemplate template in GetTemplatesFromDir(source, (ITemplateSourceFolder)entry))
                    {
                        yield return(template);
                    }
                }
            }
        }
        public IParameterSet GetParametersForTemplate(ITemplate template)
        {
            ParameterSet result = new ParameterSet();
            VsTemplate   tmplt  = (VsTemplate)template;

            foreach (CustomParameter param in tmplt.CustomParameters)
            {
                result.AddParameter(new Parameter(param.Name, TemplateParameterPriority.Optional, "string", defaultValue: param.DefaultValue));
            }

            return(result);
        }