关于跨程序集的反射

    在开发中,经常会遇到这种情况,在A.dll中需要反射B.dll中的类型,如果稍不注意,就会产生运行时错误。关于跨程序集的反射,记住两点就可以:
(1)如果使用typeof,编译能通过,则跨程序集的反射一定可以正常运行。可以说,typeof是支持强类型的。比如

Type supType = typeof(EnterpriseServerBase.DataAccess.IDBAccesser) ;

    如果当前程序集没有添加对EnterpriseServerBase.dll的引用,则编译会报错。

(2)如果使用Type.GetType,情况就复杂些,这是因为Type.GetType是非强类型的。Type.GetType的参数是一个string,当string表示的目标类型不在当前程序集中,则运行时Type.GetType会返回null。解决的办法是:首先加载目标程序集,然后再使用Assembly.GetType方法。如

            Assembly asmb = Assembly.LoadFrom("EnterpriseServerBase.dll") ;
            Type supType = asmb.GetType("EnterpriseServerBase.DataAccess.IDBAccesser") ;

    注意,当使用Type.GetType的时候,即使你添加了对EnterpriseServerBase.dll的引用,Type.GetType("EnterpriseServerBase.DataAccess.IDBAccesser")也会返回null,这是因为Type.GetType只会在当前程序集中进行类型搜索!

时间: 2024-09-20 11:53:56

关于跨程序集的反射的相关文章

关于跨程序集的反射(续)

    以前曾写过一篇"关于跨程序集的反射"的blog,关于跨程序集加载类型,文中使用的是方法是:先加载目标类型所在的程序集,再使用Assembly. GetType方法获取类型.文后Luna兄的评论说,可以直接使用Type.GetType("<<完全限定类名>>,<<程序集>>")来加载类型,当初我查了MSDN,MSDN中也说到了这一点,我也就记住了这个解决方案.但是,今天使用这种方式来跨程序集进行类型加载时,却始终

ASP.NET AutoFac 依赖注入问题(跨程序集注入问题)

问题描述 示例一:我一个接口publicinterfaceITest{stringDisplay();}publicclassTestRepository:ITest{publicstringDisplay(){return"AutoFac"}}publicclassHomeController{privateITesttest=null;publicHomeController(ITest_test){this.test=_test;}}通过Global.asax.cs文件实现依赖注

软件开发-关于c#的特性,反射,委托与回调方法的问题

问题描述 关于c#的特性,反射,委托与回调方法的问题 1.c#的特性用来有什么用?难道只是为了用反射来检索?但是我看的书上用反射检索出特性也没用来干什么,求解 2.反射,我的理解是可以加载了一个程序集之后获取其中定义的类型,并用其中定义的类型创建对象,使用其属性,字段,方法.这样是不是可以跨程序获取变量(或者说,跨程序集是不是即跨程序,打个比方,若获取了microsoft word的程序代码,金山的wps也可以在代码中加载word的程序并获取和使用其中定义的方法?) 3.回调方法是不是都要通过委

C# 反射 通过类名创建类实例

"反射"其实就是利用程序集的元数据信息. 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间. 1.假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL) object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间

c#中的反射

目录 反射的概述 反射appDomain 的程序集 反射单个程序集 利用反射获取类型信息 设置反射类型的成员 通过反射创建类型的实例 反射类型的接口 反射的性能 反射的概述 反射的定义:审查元数据并收集关于它的类型信息的能力.元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等,.System.reflection命名空间包含的几个类,允许你反射(解析)这些元数据表的代码 和反射相关的命名空间(我们就是通过这几个命

“前.NET Core时代”如何实现跨平台代码重用 ——程序集重用

除了在源代码层面实现共享("前.NET Core时代"如何实现跨平台代码重用 --源文件重用)之外,我们还可以跨平台共享同一个程序集,这种独立于具体平台的"中性"程序集通过创建一种名为"可移植类库(PCL: Portable Class Library)"项目来实现.为了让读者朋友们对PCL的实现机制具有充分的认识,我们先来讨论一个被我称为"程序集动态绑定"的话题. 目录 一.何谓程序集动态绑定? 二.程序集一致性 三.程序集

C# 反射技术应用

反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的名称.限定符和参数等.有了反射,即可对每一个类型了如指掌.如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道. 1..NET可执行应用程序结构 程序代码在编译后生成可执行的应用,我们首先要了解这种可执行应用程序的结构. 应用程序结构分为应用程序域-程序集-模块-类型-成员

框架升级后某个类型所在程序集发生转移,应用还能正常运行吗?

所谓类型转移(Type Forwarding)就是将定义在某个程序集中的类型转移到另一个程序集中.我们先通过一个简单的实例让读者朋友们对类型转移有一个感官上的认识.我们利用Visual Studio创建一个针对.NET Framework 3.5的控制台应用,并编写如下一端简单的程序输出两个常用的类型(Function<T>和TimeZoneInfo)所在程序集的名称.现在我们直接运行这个程序,会在控制台上得到如下所示的输出结果,可以看出.NET Framework 3.5(CLR 2.0)环

让用户通过宏和插件向您的 .NET 应用程序添加功能

程序 Jason Clark 本文假设您熟悉 .NET 与 C# 下载本文的代码: Plug-Ins.exe (135KB) 概述 大多数用户应用程序都受益于可由其他开发人员扩展的能力. 扩展一个用户已经很熟悉并针对它进行过培训的现有应用程序往往比从头开发来得简单和有效.因此,可扩展性会使您的应用程序更加吸引人. 您可以通过支持插件和宏等功能来使应用程序具有可扩展性. 使用 .NET Framework 可以轻松实现这一点,即使核心应用程序不是 .NET Framework 应用程序. 在本文中