| using System; |
| using System.IO; |
| using System.Linq; |
| using System.Reflection; |
| using Rider.Editor.Util; |
| using UnityEngine; |
| using Debug = UnityEngine.Debug; |
|
|
| namespace Packages.Rider.Editor |
| { |
| internal class RiderInitializer |
| { |
| public void Initialize(string editorPath) |
| { |
| var assembly = EditorPluginInterop.EditorPluginAssembly; |
| if (EditorPluginInterop.EditorPluginIsLoadedFromAssets(assembly)) |
| { |
| Debug.LogError($"Please delete {assembly.Location}. Unity 2019.2+ loads it directly from Rider installation. To disable this, open Rider's settings, search and uncheck 'Automatically install and update Rider's Unity editor plugin'."); |
| return; |
| } |
| |
| if (assembly != null) |
| { |
| return; |
| } |
| |
| |
| if (RiderPathUtil.IsRiderDevEditor(editorPath)) |
| { |
| LoadEditorPluginForDevEditor(editorPath); |
| } |
| else |
| { |
| var relPath = "../../plugins/rider-unity/EditorPlugin"; |
| if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX) |
| relPath = "Contents/plugins/rider-unity/EditorPlugin"; |
| var baseDir = Path.Combine(editorPath, relPath); |
| var dllFile = new FileInfo(Path.Combine(baseDir, $"{EditorPluginInterop.EditorPluginAssemblyName}.dll")); |
|
|
| if (!dllFile.Exists) |
| dllFile = new FileInfo(Path.Combine(baseDir, |
| $"{EditorPluginInterop.EditorPluginAssemblyNameFallback}.dll")); |
| |
| if (dllFile.Exists) |
| { |
| var bytes = File.ReadAllBytes(dllFile.FullName); |
| assembly = AppDomain.CurrentDomain.Load(bytes); |
| if (PluginSettings.SelectedLoggingLevel >= LoggingLevel.TRACE) |
| Debug.Log($"Rider EditorPlugin loaded from {dllFile.FullName}"); |
| |
| EditorPluginInterop.InitEntryPoint(assembly); |
| } |
| else |
| { |
| Debug.Log($"Unable to find Rider EditorPlugin {dllFile.FullName} for Unity "); |
| } |
| } |
| } |
|
|
| private static void LoadEditorPluginForDevEditor(string editorPath) |
| { |
| var file = new FileInfo(editorPath); |
| if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX) |
| file = new FileInfo(Path.Combine(editorPath, "rider-dev.bat")); |
| |
| if (!file.Exists) |
| { |
| Debug.Log($"Unable to determine path to EditorPlugin from {file}"); |
| return; |
| } |
| |
| var dllPath = File.ReadLines(file.FullName).FirstOrDefault(); |
|
|
| if (dllPath == null) |
| { |
| Debug.Log($"Unable to determine path to EditorPlugin from {file}"); |
| return; |
| } |
|
|
| var dllFile = new FileInfo(dllPath); |
|
|
| if (!dllFile.Exists) |
| { |
| Debug.Log($"Unable to find Rider EditorPlugin {dllPath} for Unity "); |
| return; |
| } |
|
|
| var assembly = AppDomain.CurrentDomain.Load(AssemblyName.GetAssemblyName(dllFile.FullName)); |
| if (PluginSettings.SelectedLoggingLevel >= LoggingLevel.TRACE) |
| Debug.Log($"Rider EditorPlugin loaded from {dllFile.FullName}"); |
|
|
| EditorPluginInterop.InitEntryPoint(assembly); |
| } |
| } |
| } |
|
|