C# 动态加载Dll

1、新建测试dll及方法,用vs2010新建winform程序,具体代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace reflect
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public string TestReflect()
        {
            MessageBox.Show("动态加载Dll测试");
            return "TestReflect返回值";
        }
    }
}

2、动态加载代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;

namespace reflectTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //加载dll中的函数
            //Assembly asm = Assembly.Load(strDllPath);//加载当前根目录的dll
            Assembly asm = Assembly.LoadFile(@"F:\WorkSpace\VS测试代码\反射测试001\反射message方法\reflect\reflect\bin\Debug\reflect.dll");//根据dll文件实际路径加载
            //用类型的命名空间和类获得类型
            System.Type FromClass = asm.GetType("reflect.Form1");
            //需要实例化类型,才可以使用,参数可以人为的指定,也可以无参数,静态实例可以省略
            Object obj = System.Activator.CreateInstance(FromClass);
            //通过方法名称获得方法(调试走到下面这一步的时候,就可以弹出“动态加载Dll测试”这个消息了)
            MethodInfo method = FromClass.GetMethod("TestReflect");
            //获取TestReflect函数的返回值,在这里会获取到"TestReflect返回值",如果没有返回值,可以省略这一步
            object o = method.Invoke(obj, new object[] { });
        }
    }
}

小注:

通过方法名称获得方法中的方法必须是public的!

时间: 2024-08-01 08:20:13

C# 动态加载Dll的相关文章

C#中如何动态加载Dll

1.新建测试dll及方法,用vs2010新建winform程序,具体代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace reflect { public

C# 如何动态加载DLL,实例化对象

问题描述 通过Activator.CreateInstance(assemblyName,typeName).Unwrap()可以实例化一个对象.但是如何动态加载DLL,然后通过Activator.CreateInstance(assemblyName,typeName).Unwrap()来实例化一个对象呢. 解决方案 解决方案二:Assemblyass=Assembly.LoadFrom("dllpath"); 解决方案三:Assembly.Load("程序集名"

动态加载dll,扩展系统功能

动态加载dll,主要是为了扩展功能,增强灵活性而实现的.主要通过xml配置,来获取所有要动态加载的dll,然后通过反射机制来调用dll中的类及其方法. 研究了一天,小有所得,写了一个简单的动态加载dll的通用模块,拿出来与大家分享一下: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; usi

Silverlight动态加载DLL

问题 今天手头的项目遇到一个问题,为了描述这个问题,我建立了一个简单的项目,结构如下: 问题是这样的: 1,silverlightApplication1中有一个按钮,点击后弹出窗口:silverlightApplication6中只有一个canvas来放置从SilverlightApplication1.dll反射得到的控件. 2,silverlightApplication6中动态加载了silverlightApplication1的SilverlightApplication1.dll文件

静态与动态加载Dll [示例代码]

1.DLL源代码 MyDll.h [cpp] view plaincopyprint? //////////////////////////////////////////////////////////////////////////  // MyDll.h  // 声明函数  int _stdcall Add(int a,int b);  int _stdcall Sub(int a,int b);  /////////////////////////////////////////////

一起谈.NET技术,Silverlight动态加载DLL

问题 今天手头的项目遇到一个问题,为了描述这个问题,我建立了一个简单的项目,结构如下: 问题是这样的: 1,silverlightApplication1中有一个按钮,点击后弹出窗口:silverlightApplication6中只有一个canvas来放置从SilverlightApplication1.dll反射得到的控件. 2,silverlightApplication6中动态加载了silverlightApplication1的SilverlightApplication1.dll文件

如果动态加载dll并继承该类,,

问题描述 如何,开发这个模块?目的给一个程序模块添加扩展,但是该模块必须开源,而且继承自该程序的类,才能执行.我已经开发好这个模块,但是我想进行加密,所以封装成dll.我当前的想法,写一个load.cs文件,来加载dll,并让load.cs文件继承封装dll中的类.求助,,,不知道该怎么实现,, 解决方案 解决方案二:怎么又要开源又是加密的?并让load.cs文件继承封装dll中的类这又是什么说法?解决方案三:MEF去了解一下说不定有用,把抽象类公开,实现类加密?解决方案四:没看懂你到底想干啥你

.Net项目中动态加载dll问题

问题描述 大家好,目前我们有一个ASP.NET的项目,在这个项目中我们封装了一些计算模型的类库,也就是说,在项目中的bin目录下,不仅存放了一些Asp.Net的基础支撑dll,还有一些我们自己封装的模型的dll,以便在后台程序中通过反射动态调用,但是现在客户有一个这样的需求,通过前台动态上传一些其他的计算模型的dll到系统中(bin目录下),然后在后台能够自动通过反射机制调用这些dll,但是目前我发现当我通过程序将新的dll文件上传到项目的bin目录中后,项目便无法再继续(sessiontime

有关“利用反射动态加载.DLL文件,创建该DLL文件中一个类的实例,序列化该实例并保存成二进制文件,读取二进制文件反序列化时出错”紧急求救

问题描述 各位前辈:实在是找不到如何解决这个问题.或者这个问题根本就没有办法解决?stringpath=@"E:Temp.dll";Assemblyassembly=Assembly.LoadFrom(path);AppDomain.CurrentDomain.Load(assembly.GetName());IControllercontroller=null;///遍历程序集中的所有类型:Type[]plugTypes=assembly.GetTypes();foreach(Typ