private XElement FindMatchingPackageNode(PackageReference entry, XElement packagesNode) { XElement matchingIdNode; bool hasMatchingNode = PackagesConfig.HasAttributeValue(packagesNode, PackagesConfig.IdAttributeName, entry.PackageIdentity.Id, out matchingIdNode); if (matchingIdNode != null) { string version; PackagesConfig.TryGetAttribute(matchingIdNode, PackagesConfig.VersionAttributeName, out version); if (!string.IsNullOrEmpty(version)) { NuGetVersion nuGetVersion; bool isNuGetVersion = NuGetVersion.TryParse(version, out nuGetVersion); if (isNuGetVersion && nuGetVersion != null && nuGetVersion.Equals(entry.PackageIdentity.Version)) { return(matchingIdNode); } } } return(null); }
/// <summary> /// Adds a package entry to the file /// </summary> /// <param name="entry">Package reference entry</param> public void AddPackageEntry(PackageReference entry) { if (entry == null) { throw new ArgumentNullException(nameof(entry)); } if (_disposed) { throw new PackagesConfigWriterException(string.Format(CultureInfo.CurrentCulture, Strings.UnableToAddEntry)); } var packagesNode = EnsurePackagesNode(); XElement package; if (PackagesConfig.HasAttributeValue(packagesNode, PackagesConfig.IdAttributeName, entry.PackageIdentity.Id, out package)) { throw new PackagesConfigWriterException(String.Format(CultureInfo.CurrentCulture, Strings.PackageEntryAlreadyExist, entry.PackageIdentity.Id)); } else { // Append the entry to existing package nodes var node = CreateXElementForPackageEntry(entry); packagesNode.Add(node); // Sort the entries by package Id SortPackageNodes(packagesNode); } }
/// <summary> /// Update a package entry using the original entry as a base if it exists. /// </summary> public void UpdateOrAddPackageEntry(XDocument originalConfig, PackageReference newEntry) { if (originalConfig == null) { throw new ArgumentNullException(nameof(originalConfig)); } if (newEntry == null) { throw new ArgumentNullException(nameof(newEntry)); } if (_disposed) { throw new PackagesConfigWriterException(string.Format(CultureInfo.CurrentCulture, Strings.UnableToAddEntry)); } var originalPackagesNode = originalConfig.Element(XName.Get(PackagesConfig.PackagesNodeName)); XElement matchingIdNode; if (PackagesConfig.HasAttributeValue( originalPackagesNode, PackagesConfig.IdAttributeName, newEntry.PackageIdentity.Id, out matchingIdNode)) { // Find the old entry and update it based on the new entry var packagesNode = _xDocument.Element(XName.Get(PackagesConfig.PackagesNodeName)); var newPackageNode = ReplacePackageAttributes(matchingIdNode, newEntry); packagesNode.Add(newPackageNode); SortPackageNodes(packagesNode); } else { // There was no existing entry, add a new one AddPackageEntry(newEntry); } }