public string GetVersionString()

in src/NuGet.Core/NuGet.Frameworks/FrameworkNameProvider.cs [208:280]


        public string GetVersionString(string framework, Version version)
        {
            if (version is null || IsZero(version))
            {
                return string.Empty;
            }

            int major = version.Major > 0 ? version.Major : 0;
            int minor = version.Minor > 0 ? version.Minor : 0;
            int build = version.Build > 0 ? version.Build : 0;
            int revision = version.Revision > 0 ? version.Revision : 0;

            // Remove all trailing zeros beyond the minor version.
            int partCount = (minor == 0, build == 0, revision == 0) switch
            {
                (true, true, true) => 1,
                (false, true, true) => 2,
                (_, false, true) => 3,
                (_, _, false) => 4
            };

            // Only some legacy frameworks are allowed to have one part in their version.
            if (partCount == 1 && !SingleDigitVersionFrameworks.Contains(framework))
            {
                partCount = 2;
            }

            StringBuilder sb = StringBuilderPool.Shared.Rent(256);

            // Some frameworks require a decimal point between parts.
            // If any part is greater than 9 (requiring multiple digits), we add decimal points.
            if (DecimalPointFrameworks.Contains(framework) || HasGreaterThanNinePart())
            {
                // An additional zero is needed for decimals.
                if (partCount == 1)
                    partCount = 2;

                sb.AppendInt(major);
                if (partCount > 1)
                    sb.Append('.').AppendInt(minor);
                if (partCount > 2)
                    sb.Append('.').AppendInt(build);
                if (partCount > 3)
                    sb.Append('.').AppendInt(revision);
            }
            else
            {
                sb.AppendInt(major);
                if (partCount > 1)
                    sb.AppendInt(minor);
                if (partCount > 2)
                    sb.AppendInt(build);
                if (partCount > 3)
                    sb.AppendInt(revision);
            }

            return StringBuilderPool.Shared.ToStringAndReturn(sb);

            bool HasGreaterThanNinePart()
            {
                return major > 9 || minor > 9 || build > 9 || revision > 9;
            }

            static bool IsZero(Version version)
            {
                // Build and Revision can be -1 when only major & minor are specified.
                // Out of caution, check all values for zero or less.
                return version.Major <= 0
                    && version.Minor <= 0
                    && version.Build <= 0
                    && version.Revision <= 0;
            }
        }