From ca47896204482bf4a6979e3838bf7f09f61cebeb Mon Sep 17 00:00:00 2001 From: giy <giy@omp-system.ru> Date: Fri, 02 Sep 2022 14:16:56 +0300 Subject: [PATCH] Обновление до версии 2.9.0 --- Tests/BigSolution/generator/Program.cs | 115 +++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 74 insertions(+), 41 deletions(-) diff --git a/Tests/BigSolution/generator/Program.cs b/Tests/BigSolution/generator/Program.cs index 6100ac6..5624762 100644 --- a/Tests/BigSolution/generator/Program.cs +++ b/Tests/BigSolution/generator/Program.cs @@ -38,51 +38,27 @@ { internal class Program { - static void Main(string[] args) + static void GenerateProject( + StringBuilder genSolutionProjectRef, + StringBuilder genSolutionProjectConfigs, + string pathToTemplateDir, + string pathToGeneratedDir, + int projectCount, + string projectGuid, + string projectName, + string projectRef, + IEnumerable<string> projectConfigsList) { - var projectCount = args.Length > 0 ? Convert.ToInt32(args[0]) : 400; - var pathToTemplateDir = Path.GetFullPath(@"..\..\..\template"); - var pathToGeneratedDir = Path.GetFullPath(@"..\..\..\generated"); - var templateFiles = Directory.GetFiles( - pathToTemplateDir, "*", SearchOption.AllDirectories); - var solutionFilePath = templateFiles - .Where(x => Path.GetExtension(x) == ".sln") - .First(); - var solutionName = Path.GetFileName(solutionFilePath); - var solutionText = File.ReadAllText(solutionFilePath); - var projectFilePath = templateFiles - .Where(x => Path.GetExtension(x) == ".vcxproj") - .First(); - var projectText = File.ReadAllText(projectFilePath); - var projectName = Path.GetFileNameWithoutExtension(projectFilePath); - var projectGuidMatch = Regex.Match(projectText, @"<ProjectGuid>({[^}]+})<"); - var projectGuid = projectGuidMatch.Groups[1].Value; - - var projectRef = Regex - .Match(solutionText, - @"^Project.*" + projectGuid + @"""\r\nEndProject\r\n", RegexOptions.Multiline) - .Value; - - var projectConfigsList = Regex - .Matches(solutionText, - @"^\s+" + projectGuid + @".*\r\n", RegexOptions.Multiline) - .Cast<Match>() - .Select(x => x.Value); - var projectConfigs = string.Join("", projectConfigsList); - var projectFiles = Directory.GetFiles( Path.Combine(pathToTemplateDir, projectName), "*", SearchOption.TopDirectoryOnly); - if (Directory.Exists(pathToGeneratedDir)) - Directory.Delete(pathToGeneratedDir, true); - - var genSolutionProjectRef = new StringBuilder(); - var genSolutionProjectConfigs = new StringBuilder(); - - for (int i = 1; i <= projectCount; i++) { + bool singleProject = false; + for (int i = 1; !singleProject && i <= projectCount; i++) { var idxStr = string.Format("{0:D3}", i); var genProjectName = projectName.Replace("NNN", idxStr); + if (genProjectName == projectName) + singleProject = true; var genProjectDirPath = Path.Combine(pathToGeneratedDir, genProjectName); var genProjectGuid = projectGuid.Replace("000", idxStr); @@ -110,9 +86,66 @@ genSolutionProjectConfigs.Append(genProjectConfig); } } - var genSolutionText = solutionText - .Replace(projectRef, genSolutionProjectRef.ToString()) - .Replace(projectConfigs, genSolutionProjectConfigs.ToString()); + } + + static void Main(string[] args) + { + int projectCount; + if (args.Length == 0 || !int.TryParse(args[0], out projectCount)) { + string userProjectCount; + do { + Console.Write("Project count: "); + userProjectCount = Console.ReadLine(); + } while (!int.TryParse(userProjectCount, out projectCount)); + } + var pathToTemplateDir = Path.GetFullPath(@"..\..\..\template"); + var pathToGeneratedDir = Path.GetFullPath( + $@"..\..\..\generated_{DateTime.Now.ToString("yyyyMMddhhmmssfff")}"); + var templateFiles = Directory.GetFiles( + pathToTemplateDir, "*", SearchOption.AllDirectories); + var solutionFilePath = templateFiles + .Where(x => Path.GetExtension(x) == ".sln") + .First(); + var solutionName = Path.GetFileName(solutionFilePath); + var solutionText = File.ReadAllText(solutionFilePath); + var projectFilePaths = templateFiles + .Where(x => Path.GetExtension(x) == ".vcxproj"); + var genSolutionText = solutionText; + if (Directory.Exists(pathToGeneratedDir)) + Directory.Delete(pathToGeneratedDir, true); + foreach (var projectFilePath in projectFilePaths) { + var genSolutionProjectRef = new StringBuilder(); + var genSolutionProjectConfigs = new StringBuilder(); + var projectText = File.ReadAllText(projectFilePath); + var projectName = Path.GetFileNameWithoutExtension(projectFilePath); + var projectGuidMatch = Regex.Match(projectText, @"<ProjectGuid>({[^}]+})<"); + var projectGuid = projectGuidMatch.Groups[1].Value; + var projectRef = Regex + .Match(solutionText, + @"^Project.*" + projectGuid + @"""\r\nEndProject\r\n", + RegexOptions.Multiline | RegexOptions.IgnoreCase) + .Value; + var projectConfigsList = Regex + .Matches(solutionText, + @"^\s+" + projectGuid + @".*\r\n", + RegexOptions.Multiline | RegexOptions.IgnoreCase) + .Cast<Match>() + .Select(x => x.Value); + var projectConfigs = string.Join("", projectConfigsList); + GenerateProject( + genSolutionProjectRef, + genSolutionProjectConfigs, + pathToTemplateDir, + pathToGeneratedDir, + projectCount, + projectGuid, + projectName, + projectRef, + projectConfigsList); + genSolutionText = genSolutionText + .Replace(projectRef, genSolutionProjectRef.ToString()) + .Replace(projectConfigs, genSolutionProjectConfigs.ToString()); + } var genSolutionFilePath = Path.Combine(pathToGeneratedDir, solutionName); File.WriteAllText(genSolutionFilePath, genSolutionText); } -- Gitblit v1.9.1