Example #1
0
        public static IEnumerable <string> AddMissingProjects(IEnumerable <string> solution, IEnumerable <ProjectInfo> projectInfos)
        {
            var parser        = new SolutionFileParser(solution);
            var projects      = projectInfos.ToList();
            var projectsToAdd = projects.Where(p => p.AddToSolution).ToList();

            foreach (var project in projectsToAdd.OrderBy(p => p.Name))
            {
                parser.Projects.Add(project.SolutionProjectHeader);
            }

            RemoveExistingGlobalSharedProjectsWithNewlyAddedSharedProject(projects, parser);

            foreach (var project in projects.Where(NeedsToUpdateGlobalSharedProjects).OrderBy(p => p.Id))
            {
                var files = project.GetSharedMsBuildProjectFiles();
                if (files != null)
                {
                    parser.GlobalSharedProjects.Add(files);
                }
            }

            foreach (var project in projectsToAdd.OrderBy(p => p.Id))
            {
                var configs = project.GetProjectConfigurationPlatforms(parser.GlobalSolutionConfigs);
                if (configs != null)
                {
                    parser.GlobalProjectConfigs.Add(configs);
                }
            }

            return(parser.GetSolution());
        }
        private static void UpdateSolution(InitializeSolutionInfo info, SolutionInitializer logic)
        {
            Logger.Show("Updating Solution");
            IEnumerable <string> solution = File.ReadAllLines(logic.SolutionPath);

            solution = SolutionFileEditor.AddMissingProjects(solution, logic.Projects.Values);
            if (info.IncludeCodeGenerationFiles)
            {
                var parser      = new SolutionFileParser(solution);
                var codeGenPath = Path.Combine(logic.TemplateDirectory, "CodeGeneration");
                var outputPath  = Path.Combine(Path.GetDirectoryName(info.SolutionPath) ?? "", "CodeGeneration");
                Directory.CreateDirectory(outputPath);
                var files = new List <string>();
                foreach (var file in Directory.GetFiles(codeGenPath))
                {
                    Logger.AddDetail($"Adding {file} to the solution...");
                    var name       = "CodeGeneration\\" + Path.GetFileName(file);
                    var outputFile = Path.Combine(outputPath, Path.GetFileName(file));
                    files.Add($"\t\t{name} = {name}");
                    if (File.Exists(outputFile))
                    {
                        Logger.AddDetail($"File '{outputFile}' already existing.  Skipping Adding");
                        continue;
                    }
                    File.Copy(file, outputFile);
                }
                parser.Projects.Add($@"Project(""{{2150E333-8FDC-42A3-9474-1A3956D46DE8}}"") = ""Code Generation"", ""Code Generation"", ""{{{Guid.NewGuid()}}}""
	ProjectSection(SolutionItems) = preProject
{string.Join(Environment.NewLine, files)}
	EndProjectSection
EndProject");
                File.WriteAllLines(logic.SolutionPath, parser.GetSolution());
            }
            else
            {
                File.WriteAllLines(logic.SolutionPath, solution);
            }
        }