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