反射的基本概念: .Net Framework 中提供了反射机制,可以再加载程序运行时,动态获取和加载程序集,并且可以获取到程序集的信息

创建Assembly和Entity两个程序集,在Assembly中添加Entity引用,如下图:

namespace Entity
{
public class GetData
{
public static SIMPEntities SIMP = new SIMPEntities(); /// <summary>
/// 查询方法--返回序列化json
/// </summary>
/// <returns></returns>
public string GetResule()
{
JavaScriptSerializer Serialize = new JavaScriptSerializer();
var list = SIMP.Sys_Employee
.Select(a => new { id = a.EmpId, EmpName = a.EmpName, PositionName = (a.Sys_Position!=null)?a.Sys_Position.PositionName:"无" })
.ToList();
return Serialize.Serialize(list);
}
}
}
namespace AssemblyTest
{
class Program
{
private static Program pro = new Program();
static void Main(string[] args)
{
pro.GetAssemblyInfo(); pro.LoadAssembly();
Console.ReadLine();
}
/// <summary>
/// 动态读取DLL,执行其中的方法
/// </summary>
public void LoadAssembly()
{
//DLL所在的绝对路径
Assembly assembly = Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory + "Entity.dll");
//注意写法:程序集.类名
Type type = assembly.GetType("Entity.GetData");
//获取类中的公共方法GetResule
MethodInfo methed = type.GetMethod("GetResule");
//创建对象的实例
object instance = System.Activator.CreateInstance(type);
//执行方法 new object[]为方法中的参数
object result = methed.Invoke(instance, new object[] { });
}
/// <summary>
/// //获取程序集信息
/// </summary>
public void GetAssemblyInfo()
{
Type type = typeof(Program);
Assembly assembly = Assembly.GetExecutingAssembly();
Console.WriteLine("命名空间:{0}", type.Namespace);
Console.WriteLine("程序集:{0}", type.Assembly);
Console.WriteLine("类的名字{0}", type.Name);
Console.WriteLine("类的全部名字{0}", type.FullName);
Console.WriteLine("基类:{0}", type.BaseType);
Console.WriteLine("----------------------------");
Console.WriteLine("程序集的名称:{0}", assembly.GetName());
Console.WriteLine("程序集的全名:{0}", assembly.FullName);
Console.WriteLine("程序集的版本:{0}", assembly.GetName().Version);
Console.WriteLine("程序集的位置:{0}", assembly.Location);
Console.WriteLine("程序集所在目录:{0}", AppDomain.CurrentDomain.BaseDirectory);
}
}
}

C#利用反射动态调用DLL并返回结果,和获取程序集的信息的更多相关文章

  1. C# 知识点笔记:IEnumerable<>的使用,利用反射动态调用方法

    IEnumerable<T>的使用 创建一个IEnumerable对象 List<string> fruits = new List<string> { " ...

  2. C# 利用反射动态调用类成员

    用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): publicobject InvokeMember(    string name, ...

  3. C#利用反射机制调用dll

    利用反射进行动态加载和调用. Assembly ass=Assembly.LoadFrom(DllPath); //利用dll的路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.dll Ass ...

  4. C#反射动态调用dll中的方法,并返回结果(转)

    反射的作用是动态的加载某个dll(程序集),并执行该程序集中的某个方法,并返回结果:当然也可以给该方法传递参数 namespace assembly_name { public class assem ...

  5. C#反射动态调用dll中的方法

    //加载程序集(dll文件地址),使用Assembly类 Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirec ...

  6. C#反射动态调用dll中的方法及使用QuartZ.net实现作业调度

    using Quartz; using Quartz.Impl; using System; using System.Collections.Generic; using System.Linq; ...

  7. 利用C#的反射机制动态调用DLL类库

    最近由于业务要求,需要动态调用DLL类库,所以研究了一下,感觉还好也不太难,今天就把自己理解的写了一个小例子(已经通过VS2005跑通),供大家一起研究和探讨,有理解不当的地方还请高手们多多指正,谢谢 ...

  8. 利用java反射动态调用方法,生成grid数据

    项目中需要java后台查询并组装前台grid的数据,数据行数不定,数据行定义不定,开始用了最原始的方法,写了几百行,就是前台需要什么字段后台拼接什么字段,java代码冗余量非常大,并且不够灵活,一旦前 ...

  9. C# 利用反射动态加载dll

    笔者遇到的一个问题,dll文件在客户端可以加载成功,在web端引用程序报错.解决方法:利用反射动态加载dll 头部引用加: using System.Reflection; 主要代码: Assembl ...

随机推荐

  1. 黄聪:CR2格式批量转换JPG(美图看看)

  2. spring 事务的配置学习

    1.spring事务管理器接口PlatformTransactionManager 接口中的方法 获取事务状态信息 -TransactionStatus getTransaction(Transact ...

  3. ALGO-27_蓝桥杯_算法训练_FBI树(树,递归)

    问题描述 我们可以把由“”和“”组成的字符串分为三类:全“”串称为B串,全“”串称为I串,既含“”又含“”的串则称为F串. FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种.由一个长 ...

  4. 不同三级域名与二级域名之间互相共享Cookie

    当你在项目中遇到这样一个问题,有多个站点在多个二级级域名如果要实现各域名站点下的登录状态共享,那么最简单的方法就是共享Cookie. 首先声明几个概念,域名怎么去区分. 顶级域名:.com,.cn,. ...

  5. PAT 乙级 1054 求平均值 (20) C++版

    1054. 求平均值 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题的基本要求非常简单:给定N个实 ...

  6. js实现星空效果

    本次主要是来实现上面的星空效果:在黑色的背景下面,有大小不一的星星在闪烁,当鼠标悬浮时,星星放大并旋转. 首先,我们需要一个大的夜空容器和放星星的容器: <!DOCTYPE html> & ...

  7. Java学习——多线程例子:银行

    package cys; public class Example9_3 { public static void main(String[] args) { // TODO Auto-generat ...

  8. Python中循环引用(import)失败的解决方法

    原文链接:http://blog.ihuxu.com/the-solution-to-the-problem-of-circular-import-in-python/ 我是采用方案三 "将 ...

  9. view之Scroller工具类和GestureDetector的简单用法

    转载:http://ipjmc.iteye.com/blog/1615828 Android里Scroller类是为了实现View平滑滚动的一个Helper类.通常在自定义的View时使用,在View ...

  10. [UE4]打包EXE

    Building configuration 1.Development:开发模式.不会压缩文件 2.Shipping,成品模式.移动版本会自动压缩文件