# NFinal.Common.Plugin **Repository Path**: LucasDot/NFinal.Common.Plugin ## Basic Information - **Project Name**: NFinal.Common.Plugin - **Description**: 插件极简使用,快速扩展你的项目 - **Primary Language**: C# - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-11-09 - **Last Updated**: 2025-01-23 ## Categories & Tags **Categories**: utils **Tags**: None ## README # 插件极简使用,快速扩展你的项目 * 1分钟快速掌握对插件的加载,运行以及卸载操作. * 插件之间可通过自定义公共目录的方式共享程序集 --- ## 极简使用方法 ### 1.创建插件项目,自定义入口类 ```csharp public class FastService { public void Run(string name) { Console.WriteLine($"Hi!{name}"); } } ``` ### 2.安装nuget包NFinal.Common.Plugin.调用插件程序集 ```csharp static void Main(string[] args) { //安装并使用 PluginWrapper pluginWrapper = new PluginWrapper(new PluginInfo() { AssemblyName = "插件程序集名", ClassName = "插件类全名", Name = "插件名", PluginFolder = @"插件程序集目录" }); //不返回实例,该实例对象由pluginWrapper控制生命周期 //可以保证插件始终能够正常卸载 pluginWrapper.New(); pluginWrapper.Execute("Run","Li Lei"); //卸载 pluginWrapper.UnInstall(); } ``` --- ## 一般使用方法: ### 1.自定义插件接口或父类 ```csharp public interface BaseService { void Run(); } ``` ### 2.创建插件项目并实现该接口或父类 ```csharp public class SimpleService : BaseService { public void Run(string name) { Console.WriteLine($"Hello {name}!"); } } ``` ### 3.创建主项目用于加载插件 ```csharp static void Main(string[] args) { //安装并使用 PluginWrapper pluginWrapper = new PluginWrapper(new PluginInfo() { AssemblyName = "插件程序集名", ClassName = "插件类全名", Name = "插件名", CommonAssemblyFolder="插件共享文件目录", PluginFolder = @"插件程序集目录" }); //接口方式,可调用返回对象,该实例不能赋值给其它变量. //也不能作为参数传给其它函数,否则可能会导致插件卸载失败 var simpleService = pluginWrapper.New(); simpleService.Run("Han Mei Mei"); //卸载 pluginWrapper.UnInstall(); } ``` --- ## 注意事项 1. 在主项目中引用的程序集,在插件目录中必须删除,否则会出现找不到程序集的错误. 2. 插件项目和主项目必须同为.net core项目且版本一致. 3. System.Drawing.Common声明兼容.net standard标准, 实际上只能在windows下运行.插件若包含该程序集, 应当把插件项目发布为win64或win32平台. 4. 还有很多不规范的第三方nuget包,虽然写的是兼容所有平台. 但实际上只能在某一平台运行,最终导致在linux或其它平台下运行失败, 抛出Not support this platform异常.实际上这不是插件的问题.