C# 动态加载程序集dll (实现接口)

一、程序集(接口程序集):LyhInterface.Dll

namespace LyhInterface
{
    public interface ILyhInterface
    {
        void Run();
    }
}

二、程序集(实现接口的程序集):LyhClassLibrary1.dll, LyhClassLibrary2.dll,LyhClassLibrary3.dll,所有程序集引用:LyhInterface.dll

namespace LyhClassLibrary1
{
    public class LyhClass : LyhInterface.ILyhInterface
    {
        public void Run()
        {
            throw new Exception(this.GetType().ToString());
        }
    }
}

namespace LyhClassLibrary2
{
    public class LyhClass : LyhInterface.ILyhInterface
    {
        public void Run()
        {
            throw new Exception(this.GetType().ToString());
        }
    }
}

namespace LyhClassLibrary3
{
    public class LyhClass : LyhInterface.ILyhInterface
    {
        public void Run()
        {
            throw new Exception(this.GetType().ToString());
        }
    }
}

四、主程序

1、引用:LyhInterface.dll

2、动态加载程序集:LyhClassLibrary1.dll, LyhClassLibrary2.dll,LyhClassLibrary3.dll,存储文件夹:c:\libs\

public partial class Form1 : Form
    {
        List<LyhInterface.ILyhInterface> list = new List<LyhInterface.ILyhInterface>();
        public Form1()
        {
            InitializeComponent();
        }

private void button1_Click(object sender, EventArgs e)
        {

string dir = @"c:\Libs\";
            string assemblyName = "LyhClassLibrary";
            for (int i = 0; i < 3; i++)
            {
                Assembly assembly = Assembly.LoadFile(dir + assemblyName + (i+1).ToString() + ".dll");
                Type type = assembly.GetType(assemblyName + (i+1).ToString() + ".LyhClass");
                LyhInterface.ILyhInterface instance = System.Activator.CreateInstance(type) as LyhInterface.ILyhInterface;
                list.Add(instance);
            }

}

private void button2_Click(object sender, EventArgs e)

   {

      Try { list[0].Run(); }

      Catch(Exception ex) {MessageBox.Show(ex.Message); }

   }

private void button3_Click(object sender, EventArgs e)

   {

      Try { list[1].Run(); }

      Catch(Exception ex) {MessageBox.Show(ex.Message); }

   }

private void button4_Click(object sender, EventArgs e)

   {

      Try { list[2].Run(); }

      Catch(Exception ex) {MessageBox.Show(ex.Message); }

   }

时间: 2024-07-30 13:45:07

C# 动态加载程序集dll (实现接口)的相关文章

C# 动态加载程序集信息

在设计模式的策略模式中,需要动态加载程序集信息,本文通过一个简单的实例,来讲解动态加载Dll需要的知识点. 涉及知识点: AssemblyName类,完整描述程序集的唯一标识, 用来表述一个程序集. Assembly类,在System.Reflection命名空间下,表示一个程序集,它是一个可重用.无版本冲突并且可自我描述的公共语言运行时应用程序构建基块. Module类 表述在模块上执行反射,表述一个程序集的模块信息. Type类,在System命名空间下,表示类型声明:类类型.接口类型.数组

c#动态加载卸载DLL的方法

这篇文章介绍了c#动态加载卸载DLL的方法,有需要的朋友可以参考一下 c#中通过反射可以方便的动态加载dll程序集,但是如果你需要对dll进行更新,却发现.net类库没有提供卸载dll程序集的方法.在.net 中,加入了应用程序域的概念,应用程序域是可以卸载的.也就是说,如果需要对动态加载的dll程序集进行更新,可以通过以下方法解决: 新建一个应用程序域,在该应用程序域中动态加载DLL,然后可以卸载掉该应用程序域.该应用程序域被卸载的时候,相关资源也会被回收. 要想这样实现,就要让你程序的cur

利用Appdomain动态加载程序集,实现更灵活的vs2012外接程序开发

结构图 生成目录和新的appdomain基目录相同,随时生成,随时加载. 接口代码     public interface FuncProcessings      {          void GetFunctionMessage(FuncMessage funcMessage);         string ReturnResult();     }     [Serializable]    public struct FuncMessage     {         privat

asp.net动态加载程序集创建指定类的实例及调用指定方法

以下类中有三个方法: LoadAssembly:加载指定路径的程序集 GetInstance:根据Type动态获取实例,用泛型接到返回的类型 ExecuteMothod:执行实例中的指定方法 /// <summary> /// 继承自MarshalByRefObject表示允许跨域通信 /// </summary> public class RemoteLoader : MarshalByRefObject { private Assembly _assembly; public

.Net之动态加载程序集

//路径规则所在的dll System.Reflection.Assembly ass=System.Relection.Assembly.Load("PathCheck"); //创建该实例           注意:必须使用名称空间+类名称 Object obj=ass.CreateInstance("PathCheck.SualApplyLowDistrictPrincipalCommit"); 实例: 为了以后的扩展和维护,一般情况下,需要创建一个父类,暂且

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

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

[转] 从 dll 程序集中动态加载窗体

无涯 原文 从 dll 程序集中动态加载窗体 [原创] 昨天晚上花了一晚上时间写了一个从程序集中动态加载窗体的程序.将任何包含窗体的代码编译成 dll 文件,再把 dll 文件拷贝到本程序的目录下,本程序运行时即可动态检查到 dll 文件中的窗体,将窗体类的类型在程序菜单中显示出来,点击菜单即可运行对应的窗体. 本程序主要用到了 Assembly 类动态加载程序集,再得到程序集中包含类的 Type 类型,动态生成类实例,动态调用类方法.个人觉得这是一种提供高度松耦合,可随意扩展的程序结构框架,希

非常郁闷的 .NET中程序集的动态加载

记载这篇文章的原因是我自己遇到了动态加载程序集的问题,而困扰了一天之久. 最终看到了这篇博客:http://www.cnblogs.com/brucebi/archive/2013/05/22/Assembly_Load.html?utm_source=tuicool&utm_medium=referral 但是不是直接看到的原文,而是在这里看到的:http://www.tuicool.com/articles/a2EN7j 具体是什么原因不能加载,我也不清楚,也不能描述清楚,说了,连我自己都不

Java反射之静态加载和动态加载举例小记

静态加载: package com.imooc.加载类; public class Office_Static { public static void main(String[] args) { //new 创建对象,是静态加载类,在编译时刻就需要加载所有的可能使用到的类 if("Word".equals(args[0])){ Word w = new Word(); w.start(); } if("Excel".equals(args[0])){ Excel