VR4Medical/ICI/Library/PackageCache/com.unity.ide.rider@4d374c7eb6db/Rider/Editor/Util/UnityVersionUtils.cs
2025-07-29 13:45:50 +03:00

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;
}
}
}