From e5888b5ccb1d5bb396a4b10618f96159c408c7f4 Mon Sep 17 00:00:00 2001 From: Steve Desmond Date: Sun, 14 Apr 2024 13:17:40 -0400 Subject: [PATCH] Initial multi-framework experiment --- src/LibYear.Core/FileTypes/XmlProjectFile.cs | 21 +++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/LibYear.Core/FileTypes/XmlProjectFile.cs b/src/LibYear.Core/FileTypes/XmlProjectFile.cs index 184a38a..767a77b 100644 --- a/src/LibYear.Core/FileTypes/XmlProjectFile.cs +++ b/src/LibYear.Core/FileTypes/XmlProjectFile.cs @@ -12,6 +12,24 @@ public abstract class XmlProjectFile : IProjectFile private readonly string[] _packageAttributeNames; private readonly string _versionAttributeName; + class PackageComparer : EqualityComparer + { + public override bool Equals(XElement? x1, XElement? x2) + { + if (x1 == null && x2 == null) + return true; + else if (x1 == null || x2 == null) + return false; + + return (x1.Attribute("Include")?.Value == x2.Attribute("Include")?.Value); + } + + public override int GetHashCode(XElement x) + { + return x.Attribute("Include").Value.GetHashCode(); + } + } + protected XmlProjectFile(string filename, string contents, string elementName, string[] packageAttributeNames, string versionAttributeName) { FileName = filename; @@ -21,7 +39,8 @@ protected XmlProjectFile(string filename, string contents, string elementName, s _versionAttributeName = versionAttributeName; _xmlContents = XDocument.Parse(contents); - Packages = _xmlContents.Descendants(elementName) + PackageComparer comparer = new PackageComparer(); + Packages = _xmlContents.Descendants(elementName).Distinct(comparer) .ToDictionary( d => packageAttributeNames.Select(p => d.Attribute(p)?.Value ?? d.Element(p)?.Value).FirstOrDefault(v => v != null)!, d => ParseCurrentVersion(d, versionAttributeName)