Files
linker/linker.libs/VersionHelper.cs
2024-12-10 17:13:26 +08:00

65 lines
2.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Linq;
using System.Reflection;
namespace linker.libs
{
public static class VersionHelper
{
public static string version = $"v{string.Join(".", Assembly.GetEntryAssembly().GetName().Version.ToString().Split('.').Take(3))}";
/// <summary>
/// 比较版本,相差多少
/// </summary>
/// <param name="v1"></param>
/// <param name="v2"></param>
/// <param name="abs">是否取绝对值</param>
/// <returns>负整数 v1小于v2多少0相等正整数v1大于v2多少</returns>
public static int Compare(string v1, string v2, bool abs)
{
ReadOnlySpan<char> v1Span = v1.AsSpan();
if (v1Span[0] == 'v') v1Span = v1Span.Slice(1);
ReadOnlySpan<char> v2Span = v2.AsSpan();
if (v2Span[0] == 'v') v2Span = v2Span.Slice(1);
return Compare(Version.Parse(v1Span), Version.Parse(v2Span), abs);
}
/// <summary>
/// 比较版本,相差多少
/// </summary>
/// <param name="v1"></param>
/// <param name="v2"></param>
/// <param name="abs">是否取绝对值</param>
/// <returns>负整数 v1小于v2多少0相等正整数v1大于v2多少</returns>
public static int Compare(Version v1, Version v2, bool abs)
{
int v1Major = v1.Major;
int v1Minor = v1.Minor;
int v1Build = v1.Build;
int v2Major = v2.Major;
int v2Minor = v2.Minor;
int v2Build = v2.Build;
while (v1Major < 10000 && v1Major > 0) v1Major *= 10;
while (v2Major < 10000 && v2Major > 0) v2Major *= 10;
while (v1Minor < 1000 && v1Minor > 0) v1Minor *= 10;
while (v2Minor < 1000 && v2Minor > 0) v2Minor *= 10;
while (v1Build < 100 && v1Build > 0) v1Build *= 10;
while (v2Build < 100 && v2Build > 0) v2Build *= 10;
int value = (v1Major + v1Minor + v1Build) - (v2Major + v2Minor + v2Build);
if (abs)
{
value = Math.Abs(value);
}
return value;
}
}
}