c# 动态加载dll文件,并实现调用其中的简单方法

发布时间 - 2026-01-10 22:48:18    点击率:

以下是测试代码:

新建一个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# WPF如何反射加载Geometry几何图形数据图标  # c# WPF中自定义加载时实现带动画效果的Form和FormItem  # c# 实现网页加载后将页面截取为长图片  # C# 根据表格偶数、奇数加载不同颜色  # C# 动态加载程序集信息  # C#中调用DLL时未能加载文件或程序集错误的处理方法(详解)  # C#中加载dll并调用其函数的实现方法  # C#使用Jquery zTree实现树状结构显示 异步数据加载  # C#使用反射加载多个程序集的实现方法  # C#实现动态加载dll的方法  # c#动态加载卸载DLL的方法  # 3种C# 加载Word的方法  # 不带  # 给大家  # 新建一个  # 的是  # 都是  # 加载  # 如果你  # 还可以  # 遍历  # 也可  # 这两个  # 可以通过  # 希望能  # 就不能  # 在后面  # 这篇  # 后会  # 这样子  # 理论上  # 类似于 


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


相关推荐: Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  ,在苏州找工作,上哪个网站比较好?  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  如何实现建站之星域名转发设置?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何基于云服务器快速搭建个人网站?  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  Bootstrap整体框架之JavaScript插件架构  如何在Windows虚拟主机上快速搭建网站?  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  EditPlus中的正则表达式 实战(4)  如何在云主机上快速搭建多站点网站?  如何快速搭建安全的FTP站点?  网站图片在线制作软件,怎么在图片上做链接?  如何破解联通资金短缺导致的基站建设难题?  Linux后台任务运行方法_nohup与&使用技巧【技巧】  微信公众帐号开发教程之图文消息全攻略  Laravel中的withCount方法怎么高效统计关联模型数量  大型企业网站制作流程,做网站需要注册公司吗?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  JS弹性运动实现方法分析  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel如何配置任务调度?(Cron Job示例)  Python文件操作最佳实践_稳定性说明【指导】  网站制作软件有哪些,制图软件有哪些?  Python并发异常传播_错误处理解析【教程】  昵图网官方站入口 昵图网素材图库官网入口  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  深圳网站制作培训,深圳哪些招聘网站比较好?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  如何在建站之星绑定自定义域名?  音响网站制作视频教程,隆霸音响官方网站?  html如何与html链接_实现多个HTML页面互相链接【互相】  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  如何快速查询域名建站关键信息?  如何生成腾讯云建站专用兑换码?  教你用AI润色文章,让你的文字表达更专业  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Firefox Developer Edition开发者版本入口  如何做网站制作流程,*游戏网站怎么搭建?  北京的网站制作公司有哪些,哪个视频网站最好?