博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反射整理学习<二>
阅读量:6969 次
发布时间:2019-06-27

本文共 3784 字,大约阅读时间需要 12 分钟。

使用 Assembly 类可以加载程序集、浏览程序集的元数据和构成部分、发现程序集中包含的类型以及创建这些类型的实例。

若要获取 Assembly 对象(表示当前加载到应用程序域(例如,简单项目的默认应用程序域)中的程序集)的数组,可以使用 AppDomain ..::.GetAssemblies 方法。

若要动态加载程序集, Assembly 类可提供下列静态方法(在 Visual Basic 中为 Shared 方法)。 程序集被加载到发生加载操作的应用程序域中。

加载程序集的推荐方式是使用 Load 方法,该方法标识要由其显示名称加载的程序集(例如"System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")。 搜索程序集时遵守 运行时如何定位程序集中描述的规则。

使用 ReflectionOnlyLoad 和 ReflectionOnlyLoadFrom 方法可以为反射加载程序集,但不能为执行加载程序集。 例如,可以由在 32 位平台上运行的代码检查针对 64 位平台的程序集。

LoadFile 和 LoadFrom 方法是为必须由路径标识程序集的极少数方案提供的。

若要获取当前执行的程序集的 Assembly 对象,可以使用 GetExecutingAssembly 方法。

Assembly 类的许多成员都提供有关程序集的信息。 例如:

  • GetName 方法返回一个 AssemblyName 对象,该对象提供对程序集显示名称部分的访问。
  • GetCustomAttributes 方法列出应用于程序集的属性。
  • GetFiles 方法提供对程序集清单中文件的访问。
  • GetManifestResourceNames 方法提供程序集清单中资源的名称。
  • GetTypes 方法列出程序集中的所有类型。 GetExportedTypes 方法列出对程序集以外的调用方可见的类型。 GetType 方法可用于在程序集中搜索特定类型。 CreateInstance 方法可用于在程序集中搜索和创建类型的实例。
1 using System; 2 using System.Reflection; 3  4 namespace AssemblyTest 5 { 6     class Program 7     { 8         static void Main(string[] args) 9         {10             try11             {12                 ShowAllLoadAssemblies();13                 LoadAssignAssembly();14             }15             catch (Exception ex)16             {17                 Console.WriteLine(ex.Message);18             }19             Console.ReadKey();20         }21         /// 22         /// 获取当前的程序域中已经加载的程序集列表23         /// 24         public static void ShowAllLoadAssemblies()25         {26             Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();27             Console.WriteLine("当前的程序域中已经加载的程序集如下:");28             foreach (Assembly assembly in assemblies)29             {30                 Console.WriteLine(assembly);31             }       32         }33         /// 34         /// 加载指定的程序集35         /// 36         public static void LoadAssignAssembly()37         {38             Console.WriteLine("请输入一个程序集名:");39             string assembiyName = Console.ReadLine();40             //LoadFrom 方法是为必须由路径标识程序集的极少数方案41             Assembly a = Assembly.LoadFrom(assembiyName);42             Console.WriteLine("============================\n加载程序集{0}之后\n=========================================", a.FullName);43             //刷新显示当前已加载的程序集44             ShowAllLoadAssemblies();45             Console.WriteLine("==============================\n新加载程序集的信息\n=========================");46             Console.WriteLine("程序集全名:"+a.FullName);47             #region AssemblyName注释48             //GetName 方法返回一个 AssemblyName 对象,该对象提供对程序集显示名称部分的访问。 49             //AssemblyName 对象包含有关程序集的信息,在绑定到该程序集时可以使用此信息。 程序集的标识由以下部分组成:50             //简单名称。51             //版本号。52             //加密密钥对。53             //支持的区域性。 54             #endregion55             Console.WriteLine("程序集的版本"+a.GetName().Version);56             Console.WriteLine("程序集的初始位置:"+a.CodeBase);57             Console.WriteLine("程序集位置:"+a.Location);58             Console.WriteLine("程序集入口点:"+a.EntryPoint);59             Console.WriteLine("是否是在全局程序集缓存中:" + a.GlobalAssemblyCache);60             Console.WriteLine("公共语言运行时版本:"+a.ImageRuntimeVersion);61          62             //获取程序集的类型63             Type[] types = a.GetTypes();64             Console.WriteLine("\n该程序集包含如下类型:");65             foreach (Type type in types)66             {67                 Console.WriteLine("类型名:"+type.Name);68             }69 70             //获取程序集引用程序集信息71             AssemblyName[] assemblynames = a.GetReferencedAssemblies();72             Console.WriteLine("该程序集引用的所有程序集如下:");73             foreach (AssemblyName ass in assemblynames)74             {75                 Console.WriteLine(ass);76             }77         }78     }79 }

 

转载于:https://www.cnblogs.com/rohelm/archive/2012/04/27/2473388.html

你可能感兴趣的文章
深入理解Tomcat系列之一:系统架构
查看>>
[原]Jenkins(八)---jenkins构建项目报错时发送错误报告邮件
查看>>
Smart Framework:轻量级 Java Web 框架
查看>>
在win10中使用linux上的bash命令行
查看>>
Eclipse FindBugs插件安装与使用
查看>>
介绍:成为一名 Jenkins 贡献者的旅程
查看>>
java中equals和==的区别
查看>>
还是使用jquery实现的无刷新的文件下载
查看>>
Porteus Kiosk
查看>>
$apply
查看>>
让KVM虚机能使用音箱与麦克风(vnc及ac97)
查看>>
开源还是商用?十大云运维监控工具测评告诉你答案
查看>>
Java两个时间之间差多少秒
查看>>
为读者更有目的性先放出《超容易的Linux系统管理入门书》一书的学习重点
查看>>
android Application.mk文件的APP_MODULES:
查看>>
Nginx配置文件nginx.conf中文详解
查看>>
无锁队列的实现
查看>>
SpringSecurity重写LogoutFilter
查看>>
使用idfc-proguard-maven-plugin混淆优化Jave Web工程二
查看>>
tomcat 设置内存
查看>>