/// <summary> /// Updates a package to the given value in the given files. /// </summary> /// <param name="ct"></param> /// <param name="operation"></param> /// <param name="targetFiles"></param> /// <returns></returns> private async Task <UpdateOperation[]> UpdateFiles( CancellationToken ct, UpdateOperation operation, Dictionary <FileType, string[]> targetFiles, Dictionary <string, XmlDocument> documents ) { var operations = new List <UpdateOperation>(); foreach (var files in targetFiles) { var fileType = files.Key; foreach (var path in files.Value) { var document = documents.GetValueOrDefault(path); if (document == null) { continue; } IEnumerable <UpdateOperation> updates = Array.Empty <UpdateOperation>(); var currentOperation = operation.WithFilePath(path); if (fileType.HasFlag(FileType.Nuspec)) { updates = document.UpdateDependencies(currentOperation); } else if (fileType.HasAnyFlag(FileType.DirectoryProps, FileType.DirectoryTargets, FileType.Csproj)) { updates = document.UpdatePackageReferences(currentOperation); } if (!_parameters.IsDryRun && updates.Any(u => u.ShouldProceed())) { await document.Save(ct, path); } operations.AddRange(updates); } } return(operations.ToArray()); }