Esempio n. 1
0
        public async Task RunTask()
        {
            Console.WriteLine(Environment.NewLine);
            Console.WriteLine(this.Name);
            Console.WriteLine(Environment.NewLine);

            Console.WriteLine("Input solution path.");
            Console.WriteLine(Environment.NewLine);
            string solutionPath = Console.ReadLine();

            if (!File.Exists(solutionPath))
            {
                Console.WriteLine("File does not exists!");
                return;
            }

            using var workspace = await new MSBuildWorkspaceFactory().GetWorkspace();
            Solution solution = await workspace.OpenSolutionAsync(solutionPath);

            Console.WriteLine("Select project:");
            Project?project = await TaskExecutable.RunTask(CommonTaskFunctions.GetProjectTask, solution);

            if (project == null)
            {
                return;
            }

            List <TagDocumentGroup> documentGroups = new List <TagDocumentGroup>();

            await foreach (TagDocumentGroup? documentGroup in TaskExecutable.RunTaskAsyncEnumerable(GetDocumentTask, project))
            {
                if (documentGroup != null)
                {
                    documentGroups.Add(documentGroup);
                }
            }

            var projectGroup = new TagProjectGroup(documentGroups);
            await TaskExecutable.RunTask(CommonTaskFunctions.SaveDocumentsTask, projectGroup);

            workspace.CloseSolution();
        }
        public async Task RunTask()
        {
            Console.WriteLine(Environment.NewLine);
            Console.WriteLine(this.Name);
            Console.WriteLine(Environment.NewLine);

            TagTemplateGroup?template = await TaskExecutable.RunTask(this.LoadTemplate);

            if (template == null)
            {
                return;
            }

            Console.WriteLine("Input solution path.");
            Console.WriteLine(Environment.NewLine);
            string solutionPath = Console.ReadLine();

            if (!File.Exists(solutionPath))
            {
                Console.WriteLine("File does not exists!");
                return;
            }

            using MSBuildWorkspace workspace = await new MSBuildWorkspaceFactory().GetWorkspace();
            Solution solution = await workspace.OpenSolutionAsync(solutionPath);

            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("Select project:");
            Project?project = await TaskExecutable.RunTask(CommonTaskFunctions.GetProjectTask, solution);

            if (project == null)
            {
                return;
            }

            var selectedDocuments = new List <Document>();

            await foreach (Document? document in TaskExecutable.RunTaskAsyncEnumerable(CommonTaskFunctions.SelectDocuments, project.Documents.Where(whereDocument => !selectedDocuments.Contains(whereDocument))))
            {
                if (document != null)
                {
                    selectedDocuments.Add(document);
                }
            }

            TagProjectGroup projectGroup = await CommonTaskFunctions.ImplementsTags(selectedDocuments, template.TagElements);

            List <Document> documents = new List <Document>();

            foreach (DocumentGroup createDocument in template.Documents)
            {
                foreach (TagDocumentGroup documentGroup in projectGroup.Documents)
                {
                    TagDocumentGroup newDocumentGroup = CommonTaskFunctions.ReplaceDocumentTags(documentGroup, createDocument.ReplacedTags);
                    Document?        newDocument      = CommonTaskFunctions.AppendDocumentToProject(project, newDocumentGroup);
                    if (newDocument != null)
                    {
                        project = newDocument.Project;
                        documents.Add(newDocument);
                    }
                }
            }

            workspace.TryApplyChanges(project.Solution);
            workspace.CloseSolution();
        }