File: AssemblyDependency\AssemblyNameReferenceAscendingVersionComparer.cs
Web Access
Project: ..\..\..\src\Tasks\Microsoft.Build.Tasks.csproj (Microsoft.Build.Tasks.Core)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.Collections.Generic;
 
#nullable disable
 
namespace Microsoft.Build.Tasks
{
    /// <summary>
    /// Compare the two AssemblyNameReferences by version number.
    /// </summary>
    internal sealed class AssemblyNameReferenceAscendingVersionComparer : IComparer<AssemblyNameReference>
    {
        internal static readonly IComparer<AssemblyNameReference> comparer = new AssemblyNameReferenceAscendingVersionComparer();
 
        private static Version DummyVersion { get; } = new Version(0, 0);
 
        /// <summary>
        /// Private construct so there's only one instance.
        /// </summary>
        private AssemblyNameReferenceAscendingVersionComparer()
        {
        }
 
        /// <summary>
        /// Compare the two AssemblyNameReferences by version number.
        /// </summary>
        public int Compare(AssemblyNameReference i1, AssemblyNameReference i2)
        {
            Version v1 = i1.assemblyName.Version;
            Version v2 = i2.assemblyName.Version;
 
            if (v1 == null)
            {
                v1 = DummyVersion;
            }
 
            if (v2 == null)
            {
                v2 = DummyVersion;
            }
 
            return v1.CompareTo(v2);
        }
    }
}