C# 动态加载dll插件并执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 动态加载dll插件并执行相关的知识,希望对你有一定的参考价值。

先写一个接口,来约定一下,如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LibraryApi
{
    /// <summary>
    /// 插件api
    /// </summary>
    public interface openapi
    {
        /// <summary>
        /// 名称
        /// </summary>
        string Name { get; }

        /// <summary>
        /// 作者
        /// </summary>
        string Auth { get; }

        /// <summary>
        /// 网址
        /// </summary>
        string Url { get; }

        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="md5">MD5</param>
        /// <returns></returns>
        string Decryption(string md5);
    }
}

 

然后继承接口,并实现,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization;

namespace cmd5.com
{
    public class Decrytion : LibraryApi.openapi
    {
        public string Name
        {
            get { return "wmd5解密插件v1.0"; }
        }

        public string Auth
        {
            get { return "小渣渣"; }
        }

        public string Url
        {
            get { return "http://www.wmd5.com/"; }
        }

        public string Decryption(string md5)
        {
            return "123";
        }
    }
}

 

最后动态装载dll插件,并且执行:

/// <summary>
        /// 装载dll插件
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        private bool LoadPlugin(string file)
        {
            Assembly dll = Assembly.LoadFile(file);
            foreach (var _every in dll.GetTypes())
            {
                if (_every.GetInterface(typeof(LibraryApi.openapi).Name) != null)
                {
                    LibraryApi.openapi api = System.Activator.CreateInstance(_every) as LibraryApi.openapi;
                    
                    return true;
                }
            }
            return false;
        }

 

以上是关于C# 动态加载dll插件并执行的主要内容,如果未能解决你的问题,请参考以下文章

C#开发的OpenRA动态加载插件DLL里的类实现

C# 写一个动态加载DLL的程序 怎么写?

C#动态加载dll 时程序集的卸载问题

C#动态dll系统问题

分析加载动态 DLL 的 .NET 应用程序

在 C# 中动态加载和使用 DLL