using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace Yi.Framework.Infrastructure.Helper { public static class AssemblyHelper { /// /// 此处统一获取程序集,排除微软内部相关 /// /// public static Assembly[] GetAllLoadAssembly() { return AppDomain.CurrentDomain.GetAssemblies(); } public static List GetReferanceAssemblies(this AppDomain domain) { var list = new List(); domain.GetAssemblies().ToList().ForEach(i => { GetReferanceAssemblies(i, list); }); return list; } private static void GetReferanceAssemblies(Assembly assembly, List list) { assembly.GetReferencedAssemblies().ToList().ForEach(i => { var ass = Assembly.Load(i); if (!list.Contains(ass)) { list.Add(ass); GetReferanceAssemblies(ass, list); } }); } public static List GetClass(string assemblyFile, string? className = null, string? spaceName = null) { Assembly assembly = Assembly.Load(assemblyFile); return assembly.GetTypes().Where(m => m.IsClass && className == null ? true : m.Name == className && spaceName == null ? true : m.Namespace == spaceName && !m.Name.StartsWith("<>") ).ToList(); } public static List GetClassByParentClass(string assemblyFile, Type type) { Assembly assembly = Assembly.Load(assemblyFile); List resList = new List(); List typeList = assembly.GetTypes().Where(m => m.IsClass).ToList(); foreach (var t in typeList) { var data = t.BaseType; if (data == type) { resList.Add(t); } } return resList; } public static List GetClassByInterfaces(string assemblyFile, Type type) { Assembly assembly = Assembly.Load(assemblyFile); List resList = new List(); List typeList = assembly.GetTypes().Where(m => m.IsClass).ToList(); foreach (var t in typeList) { var data = t.GetInterfaces(); if (data.Contains(type)) { resList.Add(t); } } return resList; } } }