Blame view

Yi.Abp.Net8/framework/Yi.Framework.Core/Helper/AssemblyHelper.cs 2.75 KB
515fceeb   “wangming”   框架初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Reflection;
  using System.Text;
  using System.Threading.Tasks;
  
  namespace Yi.Framework.Core.Helper
  {
      public static class AssemblyHelper
      {
  
          /// <summary>
          /// 此处统一获取程序集,排除微软内部相关
          /// </summary>
          /// <returns></returns>
          public static Assembly[] GetAllLoadAssembly()
          {
              return AppDomain.CurrentDomain.GetAssemblies();
          }
  
          public static List<Assembly> GetReferanceAssemblies(this AppDomain domain)
          {
              var list = new List<Assembly>();
              domain.GetAssemblies().ToList().ForEach(i =>
              {
                  GetReferanceAssemblies(i, list);
              });
              return list;
          }
          private static void GetReferanceAssemblies(Assembly assembly, List<Assembly> list)
          {
              assembly.GetReferencedAssemblies().ToList().ForEach(i =>
              {
                  var ass = Assembly.Load(i);
                  if (!list.Contains(ass))
                  {
                      list.Add(ass);
                      GetReferanceAssemblies(ass, list);
                  }
              });
          }
  
          public static List<Type> 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<Type> GetClassByParentClass(string assemblyFile, Type type)
          {
              Assembly assembly = Assembly.Load(assemblyFile);
  
              List<Type> resList = new List<Type>();
  
              List<Type> 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<Type> GetClassByInterfaces(string assemblyFile, Type type)
          {
              Assembly assembly = Assembly.Load(assemblyFile);
  
              List<Type> resList = new List<Type>();
  
              List<Type> 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;
          }
  
      }
  }