public static IEnumerable <string> GetPrecompiledAssemblyDirectories(PrecompiledAssemblyTypes flags) { foreach (var dir in GetPrecompiledAssemblyPaths(flags).Select(path => Path.GetDirectoryName(path)).Distinct()) { yield return(dir); } }
internal static IEnumerable <string> GetPrecompiledAssemblyPaths(PrecompiledAssemblyTypes flags) { var assemblyPaths = new List <string>(); #if UNITY_2019_1_OR_NEWER var precompiledAssemblySources = (CompilationPipeline.PrecompiledAssemblySources)flags; assemblyPaths.AddRange(CompilationPipeline.GetPrecompiledAssemblyPaths(precompiledAssemblySources)); #else if ((flags & PrecompiledAssemblyTypes.UnityEngine) != 0) { assemblyPaths.AddRange(Directory.GetFiles(Path.Combine(EditorApplication.applicationContentsPath, Path.Combine("Managed", "UnityEngine"))).Where(path => Path.GetExtension(path).Equals(".dll"))); } if ((flags & PrecompiledAssemblyTypes.UnityEditor) != 0) { assemblyPaths.AddRange(Directory.GetFiles(Path.Combine(EditorApplication.applicationContentsPath, "Managed")).Where(path => Path.GetExtension(path).Equals(".dll"))); } if ((flags & PrecompiledAssemblyTypes.UserAssembly) != 0) { assemblyPaths.AddRange(CompilationPipeline.GetPrecompiledAssemblyNames().Select(name => CompilationPipeline.GetPrecompiledAssemblyPathFromAssemblyName(name))); } #endif #if !UNITY_2019_2_OR_NEWER var extensions = new List <string>(); if ((flags & PrecompiledAssemblyTypes.UnityEngine) != 0) { extensions.AddRange(new[] { "UnityExtensions/Unity/Networking/UnityEngine.Networking.dll", "UnityExtensions/Unity/Timeline/Runtime/UnityEngine.Timeline.dll", "UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll", }); } if ((flags & PrecompiledAssemblyTypes.UnityEditor) != 0) { extensions.AddRange(new[] { "UnityExtensions/Unity/Networking/Editor/UnityEditor.Networking.dll", "UnityExtensions/Unity/Timeline/Editor/UnityEditor.Timeline.dll", "UnityExtensions/Unity/GUISystem/Editor/UnityEditor.UI.dll", }); } assemblyPaths.AddRange(extensions.Select(ext => Path.Combine(EditorApplication.applicationContentsPath, ext))); #endif return(assemblyPaths.Select(path => path.Replace("\\", "/"))); }