/// <summary> /// Completely delete the contents of a solution folder /// </summary> /// public void DeleteSolutionFolderContents(VisualStudioSolutionProjectReference solutionFolder) { Guard.NotNull(solutionFolder, nameof(solutionFolder)); if (solutionFolder.TypeId != VisualStudioProjectTypeIds.SolutionFolder) { throw new ArgumentException("Not a solution folder", "solutionFolder"); } var solutionFolderId = solutionFolder.Id; for (;;) { var childProject = NestedProjects .Where(np => np.ParentProjectId == solutionFolderId) .Select(np => GetProjectReference(np.ChildProjectId)) .FirstOrDefault(); if (childProject == null) { break; } if (childProject.TypeId == VisualStudioProjectTypeIds.SolutionFolder) { DeleteSolutionFolder(childProject); } else { DeleteProjectReferenceAndRelated(childProject); } } }
/// <summary> /// Delete a project reference /// </summary> /// public void DeleteProjectReference(VisualStudioSolutionProjectReference projectReference) { Guard.NotNull(projectReference, nameof(projectReference)); _lines.RemoveAt(projectReference.LineNumber, projectReference.LineCount); Load(); }
/// <summary> /// Completely delete a solution folder and all its contents /// </summary> /// /// <remarks> /// To delete just the solution folder project reference, use <see cref="DeleteProjectReference(string)"/> /// </remarks> /// public void DeleteSolutionFolder(VisualStudioSolutionProjectReference solutionFolder) { Guard.NotNull(solutionFolder, nameof(solutionFolder)); if (solutionFolder.TypeId != VisualStudioProjectTypeIds.SolutionFolder) { throw new ArgumentException("Not a solution folder", "solutionFolder"); } var solutionFolderId = solutionFolder.Id; DeleteSolutionFolderContents(solutionFolder); DeleteProjectReferenceAndRelated(GetProjectReference(solutionFolderId)); }
/// <summary> /// Add a project reference to the solution /// </summary> /// public VisualStudioSolutionProjectReference AddProjectReference( string typeId, string name, string location, string id) { Guard.NotNull(typeId, nameof(typeId)); Guard.NotNull(name, nameof(name)); Guard.NotNull(location, nameof(location)); Guard.NotNull(id, nameof(id)); _lines.Insert( GlobalStartLineNumber, VisualStudioSolutionProjectReference.FormatStart(typeId, name, location, id), VisualStudioSolutionProjectReference.FormatEnd()); Load(); return(GetProjectReference(id)); }
/// <summary> /// Delete a project reference and anything else relating to it /// </summary> /// public void DeleteProjectReferenceAndRelated(VisualStudioSolutionProjectReference projectReference) { Guard.NotNull(projectReference, nameof(projectReference)); var projectId = projectReference.Id; // // Delete related NestedProjects entries // for (;;) { var nesting = NestedProjects.FirstOrDefault(n => n.ParentProjectId == projectId || n.ChildProjectId == projectId); if (nesting == null) { break; } DeleteNestedProject(nesting); } // // Delete related project configurations // for (;;) { var configuration = ProjectConfigurations.FirstOrDefault(c => c.ProjectId == projectId); if (configuration == null) { break; } DeleteProjectConfiguration(configuration); } // // Delete the project reference itself // DeleteProjectReference(GetProjectReference(projectId)); }