c#使用反射加载程序集Assembly。load()使用全过程
来源:互联网 发布:网络视频监控平台 编辑:程序博客网 时间:2024/05/05 05:54
第一步 :创建一个将被加载的程序集 类库Test
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Test{ public class Class1 { string name, age; public Class1(string Name, string Age) { name = Name; age = Age; } public string GetMessage() { return name +","+ age; } public string GetJvalue(int a,int b) { return (a+b).ToString(); } }}
第二步:创建强命名程序集
首先打开visual studio 2008命令提示(开始-->程序-->microsoft visual studio 2008-->visual studio tools-->visual studio 命令提示),在其中输入:sn -k Test.snk回车,这样就生成了 Test.snk,在路径C:\Program Files\Microsoft Visual Studio 9\VC找到 Test.snk文件,放在Test类库的根目录
然后右键 类库Test 属性--签名
最后编译 得到Test.dll 强命名程序集
第三步:拷贝Test.dll 到需要使用它的项目BIN目录下
(如果要使用自己定义的目录可以在 配置文件 在<configuration> – <runtime> – <assemblyBinding>元素下 定义个 <probing privatePath="DllPath"/>)
这样可以将Test.dll放入DllPath文件夹下亦可
然后 代码加载 使用 如下:
在此之前
打开“Visual Studio 2008 命令提示”,输入:
sn -T C:\Test.snk
回车
如果程序集具有强名称,则会输出结果:
公钥标记为8d7b357e8456bb71(PublicKeyToken)
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Reflection;public partial class Default4 : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { Invoke("Test", "1.0.0.0", "neutral", "8d7b357e8456bb71", "Test", "Class1", "GetMessage",new object[] {"1","p"}); } private string Invoke(string lpFileName, string Version, string Culture, string PublicKeyToken, string Namespace, string ClassName, string lpProcName,object[] objArr) { string ssc = ""; try { // 载入程序集 Assembly MyAssembly = Assembly.Load(lpFileName + ", Version=" + Version + ", Culture=" + Culture + ", PublicKeyToken=" + PublicKeyToken); Type[] type = MyAssembly.GetTypes(); foreach (Type t in type) {// 查找要调用的命名空间及类 if (t.Namespace == Namespace && t.Name == ClassName) {// 查找要调用的方法并进行调用 MethodInfo m = t.GetMethod(lpProcName); if (m != null) { object o = Activator.CreateInstance(t, objArr); ssc = (string)m.Invoke(o, null); m.Invoke(o, null); } else ssc=" 装载出错 !"; } } }//try catch (System.NullReferenceException e) { ssc=e.Message; }//catch return ssc; }}
测试成功!
另外还有2种加载方法 比较简单 此不赘述
- c#使用反射加载程序集Assembly。load()使用全过程
- C# Assembly.Load 反射使用详解
- 反射动态加载程序集Assembly.Load和Assembley.LoadFrom
- c#反射中Assembly类动态加载程序集
- 动态加载程序集Assembly.Load
- C#中的反射 Assembly.Load() Assembly.LoadFrom()
- c#的Assembly.Load.CreateInstance(反射)和.config的使用
- C#中使用Assembly.LoadFile()加载程序集的抛异常的问题
- C#反射中Assembly.Load及Assembly.Load.CreateInstance 方法
- 关于反射Assembly.Load("程序集").CreateInstance("命名空间.类")
- 关于反射Assembly.Load("程序集").CreateInstance("命名空间.类")
- C#反射之一(Assembly.Load方法介绍)
- C#反射之一Assembly.Load方法介绍
- Assembly.Load()不能加载程序集的问题
- Assembly.Load()不能加载程序集的问题
- Assembly.Load()不能加载程序集的问题
- Assembly.Load()、Assembly.LoadFrom() 方法的使用
- 使用Assembly来开发c#程序
- java程序捕获kill信号
- Oracle SQL Developer(版本1.5.5)连接问题, Oracle11g(版本11.2)
- Python的map、filter、reduce函数
- CheckBox OnTouchListener、OnCheckedChangeListener和OnClickListener区别
- android EditText 去掉焦点和关闭软键盘
- c#使用反射加载程序集Assembly。load()使用全过程
- Selenium数据驱动之EXCEL
- C++中什么情况下要用explicit关键字修饰构造函数?
- WS-I Basic Profile
- 将一个数转成8的倍数
- Java随机产生数组元素并无重复元素方法
- 题目 2 最大子序列和问题
- 关于Unix/Linux下查看命令行历史记录(history/.bash_history)
- PHPUnit袖珍指南-第三章 PHPUnit的目的