public SolutionProjectItem AddFolderProject(string name, Guid?parentProjectId) { var item = GetProject(ProjectTypeIdSolutionFolder, name); if (item == null) { item = new SolutionProjectItem() { Id = Guid.NewGuid(), Type = ProjectTypeIdSolutionFolder, TypeName = GetProjectTypeName(ProjectTypeIdSolutionFolder), Name = name, ParentId = parentProjectId ?? Guid.Empty, Path = name, }; var match = _findProjectsDefinitionEnd.Match(SolutionData); var replaceSection = match.Value; var lastprojectend = match.Groups["lastprojectend"]?.Value; var startnextsection = match.Groups["startnextsection"]?.Value; var projectItemDefinition = $"Project(\"{{{item.Type.ToUpper()}}}\") = \"{item.Name}\", \"{item.Path}\", \"{{{item.Id.ToUpper()}}}\"\nEndProject"; var output = $"{lastprojectend}{projectItemDefinition}\n{startnextsection}"; SetSolutionData(SolutionData.Replace(replaceSection, output)); } AddProjectRelationships(new SolutionProjectItem[] { item }, parentProjectId); return(item); }
private SolutionProjectItem GetProject(Guid projectTypeId, string name) { var pattern = _findSolutionProjectRegexPattern .Replace("%%PROJECTTYPEID%%", projectTypeId.ToString()) .Replace("%%PROJECTNAME%%", name); var findProjectRegex = new Regex(pattern, RegexOptions.IgnoreCase); var projectMatch = findProjectRegex.Match(SolutionData); if (projectMatch.Success) { var solutionProjectItem = new SolutionProjectItem() { Type = projectTypeId, Id = new Guid(projectMatch.Groups["projectid"]?.Value ?? "00000000-0000-0000-0000-000000000000"), Name = name, Path = projectMatch.Groups["projectpath"]?.Value, }; solutionProjectItem.TypeName = GetProjectTypeName(solutionProjectItem.Type); return(solutionProjectItem); } return(null); }
private bool HasProjectRelationship(SolutionProjectItem projectItem, Guid parentItemId) { var pattern = _findSolutionProjectRelationshipRegexPattern .Replace("%%PROJECTID%%", projectItem.Id.ToUpper()) .Replace("%%PROJECTPARENTID%%", parentItemId.ToUpper()); var findProjectRegex = new Regex(pattern, RegexOptions.IgnoreCase); var projectMatch = findProjectRegex.Match(SolutionData); return(projectMatch.Success); }
private void RemoveProjectConfiguration(SolutionProjectItem projectItem) { var pattern = _findSolutionProjectConfigPattern .Replace("%%PROJECTNAME%%", projectItem.Id.ToUpper()); var findProjectRegex = new Regex(pattern, RegexOptions.IgnoreCase); var projectMatch = findProjectRegex.Match(SolutionData); var solutionData = SolutionData; while (projectMatch.Success) { solutionData = solutionData.Replace($"{projectMatch.Value}\n", ""); projectMatch = projectMatch.NextMatch(); } SetSolutionData(solutionData); }
public void RemoveProject(SolutionProjectItem projectItem) { var pattern = _findSolutionProjectRegexPattern .Replace("%%PROJECTTYPEID%%", projectItem.Type.ToUpper()) .Replace("%%PROJECTNAME%%", projectItem.Name); var findProjectRegex = new Regex(pattern, RegexOptions.IgnoreCase); var projectMatch = findProjectRegex.Match(SolutionData); if (projectMatch.Success) { SetSolutionData(SolutionData.Replace($"{projectMatch.Value}\n", "")); } RemoveProjectConfiguration(projectItem); RemoveProjectRelationships(projectItem); }
private void RemoveProjectRelationships(SolutionProjectItem projectItem) { var pattern = _findSolutionProjectRelationshipsRegexPattern .Replace("%%PROJECTID%%", projectItem.Id.ToUpper()); var findProjectRegex = new Regex(pattern, RegexOptions.IgnoreCase); var projectMatch = findProjectRegex.Match(SolutionData); var solutionData = SolutionData; while (projectMatch.Success) { var replacement = projectMatch.Groups["relationshipLine"]?.Value; solutionData = solutionData.Replace(replacement, ""); projectMatch = projectMatch.NextMatch(); } SetSolutionData(solutionData); }
private IEnumerable <SolutionProjectItem> GetProjects() { var projectMatches = _findSolutionProjects.Match(SolutionData); var projectConfigurations = GetProjectConfigurations(); do { var solutionProjectItem = new SolutionProjectItem() { Type = new Guid(projectMatches.Groups["projecttypeid"]?.Value ?? "00000000-0000-0000-0000-000000000000"), Id = new Guid(projectMatches.Groups["projectid"]?.Value ?? "00000000-0000-0000-0000-000000000000"), Name = projectMatches.Groups["projectname"]?.Value, Path = projectMatches.Groups["projectpath"]?.Value, }; solutionProjectItem.TypeName = GetProjectTypeName(solutionProjectItem.Type); solutionProjectItem.Configurations = projectConfigurations.Where(c => c.Id == solutionProjectItem.Id).ToArray(); yield return(solutionProjectItem); projectMatches = projectMatches.NextMatch(); } while (projectMatches.Success); }
private void UpdateSolutionWithFolderTargets(SolutionTool solutionTool, FolderTool folderTool) { var matchingTargets = GetMatchingTargets(solutionTool, folderTool, _logger); var relativePath = folderTool.FolderPath.RemoveCommonPrefix(solutionTool.FolderPath, System.IO.Path.DirectorySeparatorChar, StringComparison.InvariantCultureIgnoreCase); var subFolders = relativePath.Split(new char[] { System.IO.Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries); var addedProjects = new List <SolutionProjectItem>(); SolutionProjectItem parentFolderProject = null; foreach (var subfolder in subFolders) { parentFolderProject = solutionTool.AddFolderProject(subfolder, parentFolderProject?.Id); addedProjects.Add(parentFolderProject); _logger.LogProgress(); } solutionTool.AddProjects(matchingTargets, parentFolderProject?.Id); solutionTool.Save(); }
private SolutionProjectItem AddProject(Guid projectTypeId, string name, string path, Guid?parentProjectId) { var item = GetProject(projectTypeId, name); if (item == null) { item = new SolutionProjectItem() { Id = Guid.NewGuid(), Type = projectTypeId, TypeName = GetProjectTypeName(projectTypeId), Name = name, ParentId = parentProjectId ?? Guid.Empty, Path = path, }; var match = _findProjectsDefinitionEnd.Match(SolutionData); var replaceSection = match.Value; var lastprojectend = match.Groups["lastprojectend"]?.Value; var startnextsection = match.Groups["startnextsection"]?.Value; var projectItemDefinition = $"Project(\"{{{item.Type.ToUpper()}}}\") = \"{item.Name}\", \"{item.Path}\", \"{{{item.Id.ToUpper()}}}\"\nEndProject"; var output = $"{lastprojectend}{projectItemDefinition}\n{startnextsection}"; SetSolutionData(SolutionData.Replace(replaceSection, output)); } AddProjectRelationships(new SolutionProjectItem[] { item }, parentProjectId); if (projectTypeId == ProjectTypeIdClassLibrary || projectTypeId == ProjectTypeIdWebProject) { AddProjectConfiguration(item); } return(item); }
private void AddProjectConfiguration(SolutionProjectItem projectItem) { var configurations = GetProjectConfigurations(); var existingConfigs = configurations.Where(c => c.Id == projectItem.Id); if (existingConfigs.Any()) { return; } var match = _finsSolutionProjectConfigSections.Match(SolutionData); System.Diagnostics.Debug.Assert(match.Success); var replaceSection = match.Value; var indent = match.Groups["indent"]?.Value; var startsection = match.Groups["startsection"]?.Value; var configs = match.Groups["configs"]?.Value; var endsection = match.Groups["endsection"]?.Value; var firstConfig = configurations.First(); var cloneTemplateConfig = configurations.Where(c => c.Id == firstConfig.Id); var configBuilder = new StringBuilder(); foreach (var cloneConfig in cloneTemplateConfig) { configBuilder.Append($"{indent}{{{projectItem.Id.ToUpper()}}}.{cloneConfig.ProjectConfig}.{cloneConfig.ConfigItem} = {cloneConfig.Solutionconfig}\n"); } var output = $"{startsection}\n{indent}{configs}{configBuilder}{endsection}"; SetSolutionData(SolutionData.Replace(replaceSection, output)); _didChangeFile = true; }