zoukankan      html  css  js  c++  java
  • .net core 程序集帮助类

     public class RuntimeHelper
        {
            /// <summary>
            /// 获取项目程序集,排除所有的系统程序集(Microsoft.***、System.***等)、Nuget下载包
            /// </summary>
            /// <returns></returns>
            public static IList<Assembly> GetAllAssemblies()
            {
                List<Assembly> list = new List<Assembly>();
                var deps = DependencyContext.Default;
                //排除所有的系统程序集、Nuget下载包
                var libs = deps.CompileLibraries.Where(lib => !lib.Serviceable && lib.Type != "package");
                foreach (var lib in libs)
                {
                    try
                    {
                        var assembly = AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(lib.Name));
                        list.Add(assembly);
                    }
                    catch (Exception ex)
                    {
                        //
                    }
                }
                return list;
            }
    
            public static Assembly GetAssembly(string assemblyName)
            {
                return GetAllAssemblies().FirstOrDefault(f => f.FullName.Contains(assemblyName));
            }
    
            public static IList<Type> GetAllTypes()
            {
                List<Type> list = new List<Type>();
                foreach (var assembly in GetAllAssemblies())
                {
                    var typeinfos = assembly.DefinedTypes;
                    foreach (var typeinfo in typeinfos)
                    {
                        list.Add(typeinfo.AsType());
                    }
                }
                return list;
            }
    
            /// <summary>
            /// 根据AssemblyName获取所有的类
            /// </summary>
            /// <param name="assemblyName"></param>
            /// <returns></returns>
            public static IList<Type> GetTypesByAssembly(string assemblyName)
            {
                List<Type> list = new List<Type>();
                var assembly = AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(assemblyName));
                var typeinfos = assembly.DefinedTypes;
                foreach (var typeinfo in typeinfos)
                {
                    list.Add(typeinfo.AsType());
                }
                return list;
            }
    
            public static Type GetImplementType(string typeName, Type baseInterfaceType)
            {
                return GetAllTypes().FirstOrDefault(t =>
                {
                    if (t.Name == typeName && t.GetTypeInfo().GetInterfaces().Any(b => b.Name == baseInterfaceType.Name))
                    {
                        var typeinfo = t.GetTypeInfo();
                        return typeinfo.IsClass && !typeinfo.IsAbstract && !typeinfo.IsGenericType;
                    }
                    return false;
                });
            }
        }
  • 相关阅读:
    创建windows服务
    Scrum演练(2)
    数据结构链表创建与输出
    C++ XML解析之tinyXML
    解决VS2010启动速度死慢的问题
    标准C++中string类的用法总结
    模版参数编译时检查方法,利用typedef
    static的作用
    数据结构实现链表的反转
    字节对齐
  • 原文地址:https://www.cnblogs.com/li-lun/p/9618238.html
Copyright © 2011-2022 走看看