zoukankan      html  css  js  c++  java
  • .net 程序集的加载与反射

    一. 程序集的加载:

      在CLR内部使用System.Reflection.Assembly类的静态LoadFrom方法尝试加载程序集。

          LoadFrom方法在内部调用Assembly的Load方法,将AssemblyName对象传给它,然后CLR应用版本绑定从定向策略,并在各个位置查询匹配的程序集。Load找到匹配的程序集就会加载它。如果Load没有找到匹配的程序集,LoadFrom会通过LoadFrom的实参传递的路劲中的程序集。

            //LoadFrom 根据已知的程序集路径加载程序集
            Assembly a = Assembly.LoadFrom("@c://query.dll");

        如果传递的是一个Internet位置,CLR会下载文件,吧它安装到用户的下载缓存中,再从那里加载。注意必须联网,否则会抛异常。但是如果是之前下载过的文件,然后再脱机状态下会使用以前下载的文件,不会抛出异常。

       还可以调用UnsafeLoadFrom,它能够加载从互联网上下载的程序集,同时绕过一些安全检查。

      一般其他工具是使用Assemly 的LoadFile方法任意加载程序集。

    使用 Assembly.ReflectionOnlyLoadFrom 或Assembly.ReflectionOnlyLoad 加载程序集时,CLR静止程序集中的任何代码执行。试图执行由这两个方法加载的程序集中的代码时,CLR会抛出异常。

    二. 使用反射构建动态可扩展应用程序。

       反射的相当强大的,允许在运行时发现并使用编译时还不了解的类型及其成员。但是,它也有两个缺点。

       a. 反射造成编译时无法保证类型安全。由于反射严重依赖字符串,所以会丧失编译时的类型安全性。

       b. 反射速度慢。使用反射时,类型及其成员在编译时位置;你要用字符串名称标示每个类型,及其成员,然后运行时发现他们。

           也就是说反射机制会不停的执行字符串搜索。

       利用System.Reflection命名空间包含的类型,可以反射解析对应元数据类型的字段,方法,属性,和事件。

    三. 发现程序集中定义的类型

      Assembly的ExportedTypes属性: 显示其中定义的所有公开导出的类型

      

      static void Main(string[] args)
      {
                // 反射
                string dataAssembly = "System.Data,version=4.0.0.0,culture=neutral,PublicKeyToken=b77a5c561934e089";
                ReflectionTempte.LoadAssemAndShowPublicTypes(dataAssembly);
      }
    
     public static void LoadAssemAndShowPublicTypes(string assemId)
            {
                Assembly a = Assembly.Load(assemId);
                //循环显示已加载程序集中的每个公开类型  导出Type的全名
                foreach (Type t in a.ExportedTypes)
                {
                    //显示全名
                    Console.WriteLine(t.FullName);
                } 
            }
  • 相关阅读:
    XP系统无法安装net framework 4.0 解决方法
    StructureMap DI & IoC 工具介绍
    Castle ActiveRecord学习实践(7)级联
    Error.popStackFrame 函数
    抽象泄漏(leaky abstraction)
    [Exception]IIS6:The entry "*" has already been added的解决方法
    ASP.NET 设计模式 读书摘记2
    PHP模块开发(一) PHP环境搭建
    PHP函数HTTP 相关函数
    PHP函数FTP文件传输函数
  • 原文地址:https://www.cnblogs.com/dragon-L/p/5384649.html
Copyright © 2011-2022 走看看