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 ...
随机推荐
- 分页sql写法【只用最新的】
offset m rows FETCH NEXT n ROWS ONLY m=(pageindex-1)*pagesize n=pagesize sql server 2012以上适用.
- Visual Studio 2019/2017 安装使用教程(快速上手版)
目录 Visual Studio 2017 安装使用教程(详细) 在此鸣谢范华对本文工作的大力支持 一.下载 二.安装 2017版本新建项目过程 2019版本新建项目过程 然后你就可以简单编写一段代码 ...
- if的各种真假判断
- Git初级
一,安装git 一键安装 Mac 或 Windows. 二,下载一个工具书 Git 命令手册 free Git cheat sheet 三,安装完成之后需要先配置两个基本配置:用户名和邮箱 $ git ...
- oracle表空间不足时如何处理
1 查看表在那个表空间select tablespace_name,table_name from all_tables where table_name='T_BM_GOODS_BASE'; 2 ...
- 05-RARP: 逆地址解析协议
具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取I P地址.但是无盘机,如X终端或无盘工作站,则需要采用其他方法来获得I P地址. 网络上的每个系统都具有唯一的硬件地址,它是由网络接口生产厂家 ...
- Windows安装启动MySQL
Win安装MySQL数据库将下载下来的mysql解压到指定目录下,cmd切换到bin目录下>mysqld -install 安装服务>mysqld -remove 卸载服务>net ...
- [SQL]卸载数据库清理注册表方法regedit
.打开注册表. 开始——运行——regedit——确定 .然后找到下面的文件夹,删除掉: HKEY_CURRENT_USER\ Software\ Microsoft\ Microsoft SQL S ...
- Linux后台有个systemd-r进程,占用5355等端口
编辑配置文件 vim /etc/systemd/resolved.conf 设置LLMNR=0 重启服务: systemctl restart systemd-resolved.service
- Hbase访问方式
Hbase访问方式 Hbase shell命令操作 Hbase shell命令操作--general操作 首先启动Hbase 启动shell 查看表结构 删除一个表 创建表和查看表结构 插入几条数据 ...