c# 动态加载dll文件,并实现调用其中的方法(推荐)

发布时间 - 2026-01-10 22:54:06    点击率:

以下是测试代码:

新建一个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文件,并实现调用其中的方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# c  # 动态加载dll  # C#中加载dll并调用其函数的实现方法  # C# 调用C++写的dll的实现方法  # PHP调用C#开发的dll类库方法  # C++调用C#的DLL实现方法  # C#调用C++dll方法步骤  # C++调用C#的DLL程序实现方法  # C#调用C类型dll入参为struct的问题详解  # 不带  # 给大家  # 新建一个  # 的是  # 都是  # 加载  # 如果你  # 还可以  # 遍历  # 也可  # 这两个  # 可以通过  # 希望能  # 就不能  # 在后面  # 这篇  # 后会  # 这样子  # 理论上  # 类似于 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php结合redis实现高并发下的抢购、秒杀功能的实例  如何在IIS7中新建站点?详细步骤解析  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  香港服务器网站卡顿?如何解决网络延迟与负载问题?  香港服务器WordPress建站指南:SEO优化与高效部署策略  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  如何续费美橙建站之星域名及服务?  音乐网站服务器如何优化API响应速度?  如何在不使用负向后查找的情况下匹配特定条件前的换行符  Laravel如何使用模型观察者?(Observer代码示例)  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  bing浏览器学术搜索入口_bing学术文献检索地址  JavaScript中的标签模板是什么_它如何扩展字符串功能  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Laravel定时任务怎么设置_Laravel Crontab调度器配置  node.js报错:Cannot find module 'ejs'的解决办法  高端建站如何打造兼具美学与转化的品牌官网?  iOS发送验证码倒计时应用  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Android使用GridView实现日历的简单功能  在线制作视频网站免费,都有哪些好的动漫网站?  如何用花生壳三步快速搭建专属网站?  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  清除minerd进程的简单方法  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  如何快速搭建二级域名独立网站?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  如何在万网自助建站中设置域名及备案?  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  网站制作软件有哪些,制图软件有哪些?  详解MySQL数据库的安装与密码配置  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  如何用5美元大硬盘VPS安全高效搭建个人网站?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  如何在腾讯云服务器上快速搭建个人网站?