C#利用反射动态调用DLL并返回结果,和获取程序集的信息
反射的基本概念: .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并返回结果,和获取程序集的信息的更多相关文章
- C# 知识点笔记:IEnumerable<>的使用,利用反射动态调用方法
IEnumerable<T>的使用 创建一个IEnumerable对象 List<string> fruits = new List<string> { " ...
- C# 利用反射动态调用类成员
用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): publicobject InvokeMember( string name, ...
- C#利用反射机制调用dll
利用反射进行动态加载和调用. Assembly ass=Assembly.LoadFrom(DllPath); //利用dll的路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.dll Ass ...
- C#反射动态调用dll中的方法,并返回结果(转)
反射的作用是动态的加载某个dll(程序集),并执行该程序集中的某个方法,并返回结果:当然也可以给该方法传递参数 namespace assembly_name { public class assem ...
- C#反射动态调用dll中的方法
//加载程序集(dll文件地址),使用Assembly类 Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirec ...
- C#反射动态调用dll中的方法及使用QuartZ.net实现作业调度
using Quartz; using Quartz.Impl; using System; using System.Collections.Generic; using System.Linq; ...
- 利用C#的反射机制动态调用DLL类库
最近由于业务要求,需要动态调用DLL类库,所以研究了一下,感觉还好也不太难,今天就把自己理解的写了一个小例子(已经通过VS2005跑通),供大家一起研究和探讨,有理解不当的地方还请高手们多多指正,谢谢 ...
- 利用java反射动态调用方法,生成grid数据
项目中需要java后台查询并组装前台grid的数据,数据行数不定,数据行定义不定,开始用了最原始的方法,写了几百行,就是前台需要什么字段后台拼接什么字段,java代码冗余量非常大,并且不够灵活,一旦前 ...
- C# 利用反射动态加载dll
笔者遇到的一个问题,dll文件在客户端可以加载成功,在web端引用程序报错.解决方法:利用反射动态加载dll 头部引用加: using System.Reflection; 主要代码: Assembl ...
随机推荐
- [蓝桥杯]ALGO-86.算法训练_矩阵乘法
问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...
- 【git】之修改git仓库地址
方法1 git remote set-url origin <url> 方法2 git remote rm origin git remote add origin [url] 方法三 直 ...
- Facet with Lucene
Facets with Lucene Posted on August 1, 2014 by Pascal Dimassimo in Latest Articles During the develo ...
- 【并发】基于 @Async和 CompletableFuture 实现并发异步操作
参考链接:Spring官方示例 User.java package hello; import com.fasterxml.jackson.annotation.JsonIgnorePropertie ...
- springboot(整合事务和分布式事务)
springboot +mybatis 单数据源,事务 事务:简单理解指的是一组操作,里面包含许多个单一的逻辑,只要有一个逻辑没有执行成功 ,那么都算失败.所有的数据都回归到最初的状态(回滚) 代码实 ...
- timeStamp(时间戳) 事件属性
Event 对象 定义和用法 timeStamp 事件属性可返回一个时间戳.指示发生事件的日期和时间(从 epoch 开始的毫秒数). epoch 是一个事件参考点.在这里,它是客户机启动的时间. 并 ...
- css文字链接滑过向上移动1像素
方法一:行高 a{line-height:22px;} a:hover{line-height:21px;} 方法二:定位 a{position:absolute;top:0;} a:hover{ ...
- jvm感知docker容器参数
docker中的jvm检测到的是宿主机的内存信息,它无法感知容器的资源上限,这样可能会导致意外的情况. -m参数用于限制容器使用内存的大小,超过大小时会被OOMKilled. -Xmx: 默认为物理 ...
- centos6.5网络虚拟化技术
一.配置KVM虚拟机NAT网络 1.创建脚本执行权限 下面是NAT启动脚本 # vi /etc/qemu-ifup-NAT 赋予权限 # chmod +x /etc/qemu-ifup-NAT 下载镜 ...
- public class的类名必须跟文件名保持一致吗?