以下是测试代码:
新建一个classlibrary,包括两个类class1和class2,这两个类中分别有一个要领,都是返回一个字符串,代码以下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace mydll { public class Class1 { public Class1() { } public string sayhello() { return "hello,word!"; } } public class Class2 { public Class2() { } public string saybeautiful() { return "beautiful,very good!"; } } }
在编译完成后会生成一个mydll.dll动态链接库,然后新建一个winform项目(其他也能够,调试用):
private void button1_Click(object sender, EventArgs e) { string path = @"D:\123\mydll\mydll\bin\Debug\mydll.dll"; //Byte[] byte1 = System.IO.File.ReadAllBytes(path);//也是能够的 //Assembly assem = Assembly.Load(byte1); Assembly assem = Assembly.LoadFile(path); //string t_class = "mydll.Class1";//理论上已加载了dll文件,能够经由过程定名空间加上类名猎取类的范例,这里应当修改成以下: //string t_class = "mydll.Class1,mydll";//假如你想要获得的是被本工程内部的类,能够“定名空间.父类……类名”;假如是外部的,须要在后面加上“,链接库名”; //再次谢谢thy38的协助。 //Type ty = Type.GetType(t_class);//这儿在调试的时刻ty=null,一向不理解,望有高人能够解惑 Type[] tys = assem.GetTypes();//只好获得一切的范例名,然后遍历,经由过程范例名字来区别了 foreach (Type ty in tys)//huoquleiming { if (ty.Name == "Class1") { ConstructorInfo magicConstructor = ty.GetConstructor(Type.EmptyTypes);//猎取不带参数的组织函数 object magicClassObject = magicConstructor.Invoke(new object[] { });//这里是猎取一个类似于类的实例的东东 //object magicClassObject = Activator.CreateInstance(t);//猎取无参数的组织实例还能够经由过程如许 MethodInfo mi = ty.GetMethod("sayhello"); object aa=mi.Invoke(magicClassObject, null); MessageBox.Show(aa.ToString());//这儿是实行类class1的sayhello要领 } if (ty.Name == "Class2") { ConstructorInfo magicConstructor = ty.GetConstructor(Type.EmptyTypes); //猎取不带参数的组织函数,假如有组织函数且没有不带参数的组织函数时,这儿就不能如许子啦 object magicClassObject = magicConstructor.Invoke(new object[] { }); MethodInfo mi = ty.GetMethod("saybeautiful"); object aa = mi.Invoke(magicClassObject, null);//要领有参数时,须要把null替换为参数的鸠合 MessageBox.Show(aa.ToString()); } } //AppDomain pluginDomain = (pluginInstanceContainer[key] as PluginEntity).PluginDomain; //if (pluginDomain != null) //{ // AppDomain.Unload(pluginDomain); // } }
以上就是c# 动态加载dll文件,并完成挪用个中的要领(引荐)剖析的内容,更多相关内容请关注ki4网(www.ki4.cn)!