简单的C#动态加载dll并转换类型

可以通过该方法来实现程序插件化。

假设A,B两个类,A类为宿主,B类为插件需要加载到A类中:

class Program
{
    public interface IHellow
    {
        void Hellow();
    }

    static void Main(string[] args)
    {
        Assembly ass = Assembly.LoadFrom("D:/xx.dll");
        var wormMain = ass.GetTypes().FirstOrDefault(m => m.GetInterface(typeof(IHellow).Name) != null);
        var tmpObj = (IHellow)Activator.CreateInstance(wormMain);

        tmpObj.Hellow();

        Console.Read();
    }
}

A类为宿主类

namespace ClassLibrary1
{
    public class WormMain : IHellow
    {
        public void Hellow()
        {
            Console.WriteLine("Test Ok");
        }
    }
}

B类插件类

需要引用一下A类的项目文件,以得到接口。

A类输出结果:

"Test Ok"

简单的C#动态加载dll并转换类型,布布扣,bubuko.com

时间: 2024-10-01 07:27:04

简单的C#动态加载dll并转换类型的相关文章

unity3d动态加载dll的API以及限制

Unity3D的坑系列:动态加载dll 一.使用限制 现在参与的项目是做MMO手游,目标平台是Android和iOS,iOS平台不能动态加载dll(什么原因找乔布斯去),可以直接忽略,而在Android平台是可以动态加载dll的,有了这个就可以实现代码更新,不过实际上,在unity里要用上动态加载dll是有很多限制的(不了解的话就是坑). 限制1:在Android手机里动态加载dll不能使用Assembly.LoadFile(string path),只能使用Assembly.Load(byte

Unity3D的坑系列:动态加载dll

Unity3D的坑系列:动态加载dll 我现在参与的项目是做MMO手游,目标平台是Android和iOS,iOS平台不能动态加载dll(什么原因找乔布斯去),可以直接忽略,而在Android平台是可以动态加载dll的,有了这个就可以实现代码更新,不过实际上,在unity里要用上动态加载dll是有很多限制的(不了解的话就是坑). 限制1:在Android手机里动态加载dll不能使用Assembly.LoadFile(string path),只能使用Assembly.Load(byte[] raw

.Net常用技巧_动态加载Dll

原理如下: 1.利用反射进行动态加载和调用. Assembly ass=Assembly.LoadFrom(DllPath); //利用dll的路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.dll Assembly.LoadFile 只加载指定文件,并不会自动加载依赖程序集.Assmbly.Load无需后辍名 2.加载dll后,需要使用dll中某类. Type type=ass.GetType(“TypeName”);//用类型的命名空间和名称获得类型 3.需要实例化类型,才可以使用

Delphi静态加载DLL和动态加载DLL示例

下面以Delphi调用触摸屏动态库xtkutility.dll为例子,说明如何静态加载DLL和动态加载DLL. 直接上代码. 1.静态加载示例 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) btnEnableTouch: TButton; btnDi

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,通过反射,调用参数,方法,窗体

.net中常会用到动态加载DLL,而DLL中可能包含各种参数.方法.窗体,如何来调用动态加载这些参数.方法.窗体呢? 在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系: System.Reflection命名空间 (1)   AppDomain:应用程序域,可以将其理解为一组程序集的逻辑容器 (2)   Assembly:程序集类 (3)   Module:模块类 (4)   Type:使用反射得到类型信息的最核心的类 他们之间是一种从属关系,也就是说,一个AppDomain可以

c# 动态加载dll文件

/// <summary> /// 动态加载DLL /// </summary> /// <param name="lpFileName">DLL路径</param> /// <param name="Namespace">命名空间</param> /// <param name="ClassName">类名</param> /// <param

CS.动态加载DLL.动态生成.运行代码.BS.AutoFac管理实现类

以英雄联盟为例.界面上经常有Load....xxxx.dll.一般都是加载子系统.比如装备系统.英雄系统等.在实际开发中很多项目非常庞大.都会分割成独立子解决方案开发.后期就需要加载回来.一般都是利用代码动态加载. ....这个时间点貌似不能上传图片.将就点看 Father //母解决方案.登陆页面和Load.加载子解决方案Dll页面 Father1//母解决方案下的类库有共通的父类.所有的子解决方案都会加载此类库 Son//子解决方案.装备系统.英雄系统 -------------------

C# 实现动态加载DLL插件 及HRESULT:0x80131047处理

本代码实现DLL的动态加载, 类似PS里的滤镜插件! 1. 建立一个接口项目类库,此处名称为:Test.IPlugin using System; namespace Test.IPlugin { public interface IPlugin { void Run(object obj); } } 2.建立一个DLL插件类库项目,此项目要引用接口项目'Test.IPlugin',并实现Run方法, 此处名称为:Test.Plugin using System; namespace Test.