56 lines
1.6 KiB
C#
56 lines
1.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text.RegularExpressions;
|
|
using JetBrains.Annotations;
|
|
using UnityEngine;
|
|
|
|
namespace Packages.Rider.Editor.Util
|
|
{
|
|
internal class UnityVersionUtils
|
|
{
|
|
private static string UnityApplicationVersion => Application.unityVersion;
|
|
|
|
public static Version UnityVersion
|
|
{
|
|
get
|
|
{
|
|
var ver = UnityApplicationVersion.Split(".".ToCharArray()).Take(2).Aggregate((a, b) => a + "." + b);
|
|
return new Version(ver);
|
|
}
|
|
}
|
|
|
|
[CanBeNull]
|
|
public static string FindClosestMatch(string prefix, Version unityVersion, string[] dllFiles)
|
|
{
|
|
|
|
// Get all matching DLLs based on the prefix
|
|
|
|
// List to hold file and version pairs
|
|
var versionedFiles = new List<(string file, Version version)>();
|
|
|
|
// Regex to extract version (example: EditorPlugin_v2019.2.dll)
|
|
var versionRegex = new Regex($"{prefix}(\\d+\\.\\d+)");
|
|
|
|
foreach (var dllPath in dllFiles)
|
|
{
|
|
var fileName = Path.GetFileName(dllPath);
|
|
var match = versionRegex.Match(fileName);
|
|
|
|
if (match.Success && Version.TryParse(match.Groups[1].Value, out var version))
|
|
{
|
|
versionedFiles.Add((dllPath, version));
|
|
}
|
|
}
|
|
|
|
// Find the closest version less than or equal to Unity version
|
|
var closestMatch = versionedFiles
|
|
.Where(vf => vf.version <= unityVersion)
|
|
.OrderByDescending(vf => vf.version) // Closest version (descending order)
|
|
.FirstOrDefault();
|
|
|
|
return closestMatch.file;
|
|
}
|
|
}
|
|
} |