private Solution ApplyFileChanges(Solution solution, IEnumerable<FileChange> fileChanges, bool applyingChanges) { foreach (FileChange fileChange in fileChanges) { var oldDocument = fileChange.GetOldDocument(); var updatedDocument = fileChange.GetUpdatedDocument(); bool isAdditionalDoc = fileChange.IsAdditionalDocumentChange; if (oldDocument == null) { // Added document to new solution. // If unchecked, then remove this added document from new solution. if (applyingChanges && fileChange.CheckState == __PREVIEWCHANGESITEMCHECKSTATE.PCCS_Unchecked) { solution = isAdditionalDoc ? solution.RemoveAdditionalDocument(updatedDocument.Id) : solution.RemoveDocument(updatedDocument.Id); } } else if (updatedDocument == null) { // Removed document from old solution. // If unchecked, then add back this removed document to new solution. if (applyingChanges && fileChange.CheckState == __PREVIEWCHANGESITEMCHECKSTATE.PCCS_Unchecked) { var oldText = oldDocument.GetTextAsync().Result.ToString(); solution = isAdditionalDoc ? solution.AddAdditionalDocument(oldDocument.Id, oldDocument.Name, oldText, oldDocument.Folders, oldDocument.FilePath) : solution.AddDocument(oldDocument.Id, oldDocument.Name, oldText, oldDocument.Folders, oldDocument.FilePath); } } else { // Changed document. solution = isAdditionalDoc ? solution.WithAdditionalDocumentText(updatedDocument.Id, updatedDocument.GetTextAsync().Result) : solution.WithDocumentText(updatedDocument.Id, updatedDocument.GetTextAsync().Result); } } return solution; }
/// <summary> /// Creates a new solution instance with the project updated to include a new document that /// will load its text from the file path. /// </summary> public static Solution AddDocument(this Solution solution, DocumentId documentId, string filePath, IEnumerable <string> folders = null) { return(solution.AddDocument(documentId, Path.GetFileName(filePath), new FileTextLoader(filePath), folders)); }