1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- 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) // already loaded RIDER-92419
- {
- return;
- }
-
- // for debugging rider editor plugin
- 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); // doesn't lock assembly on disk
- 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);
- }
- }
- }
|