Files
ShrinkModFramework/Runtime/Metadata/ShrinkVersionUtility.cs
T
cneicy d15bf00512
Publish UPM package / publish (push) Successful in 3s
Publish NuGet packages / publish (push) Successful in 2m18s
feat: 公开宿主组合加载 API、Forge 风格依赖版本区间与加载顺序、程序集解析策略
- ShrinkModComponentDiscovery.Discover 公开:只发现、不执行生命周期
- ShrinkModLoader.LoadComposed / ShrinkModCordisRuntime.ApplyComposedAsync:宿主提供元数据组合加载,支持纯数据包与 IShrinkModWrapper 公开真实实例
- 公开 TryAttachEventBusInstance,随生命周期逆操作释放
- 依赖新增 VersionRange(Maven/Forge 区间语法)与 Ordering(Before/After)
- AssemblyResolvePolicy 可限制跨模组程序集解析
2026-11-10 07:39:22 +08:00

48 lines
1.5 KiB
C#

using System;
namespace ShrinkModFramework
{
internal static class ShrinkVersionUtility
{
public static int Compare(string left, string right)
{
if (ReferenceEquals(left, right)) return 0;
if (left == null) return -1;
if (right == null) return 1;
var leftParts = left.Split('.');
var rightParts = right.Split('.');
var max = Math.Max(leftParts.Length, rightParts.Length);
for (var i = 0; i < max; i++)
{
var leftValue = i < leftParts.Length ? ParseSegment(leftParts[i]) : 0;
var rightValue = i < rightParts.Length ? ParseSegment(rightParts[i]) : 0;
if (leftValue != rightValue)
return leftValue.CompareTo(rightValue);
}
if (System.Text.RegularExpressions.Regex.IsMatch(left, @"^[0-9]+(?:[.][0-9]+)*$") &&
System.Text.RegularExpressions.Regex.IsMatch(right, @"^[0-9]+(?:[.][0-9]+)*$")) return 0;
return string.CompareOrdinal(left, right);
}
private static int ParseSegment(string segment)
{
if (string.IsNullOrEmpty(segment))
return 0;
var digits = "";
for (var i = 0; i < segment.Length; i++)
{
if (!char.IsDigit(segment[i]))
break;
digits += segment[i];
}
return int.TryParse(digits, out var value) ? value : 0;
}
}
}