使用插件创建 .NET Core 应用程序

使用插件创建 .NET Core 应用程序项目05/10/2023

本教程展示了如何创建自定义的 AssemblyLoadContext 来加载插件。 AssemblyDependencyResolver 用于解析插件的依赖项。 该教程正确地将插件依赖项与主机应用程序隔离开来。 将了解如何执行以下操作:

构建支持插件的项目。创建自定义 AssemblyLoadContext 加载每个插件。使用 System.Runtime.Loader.AssemblyDependencyResolver 类型允许插件具有依赖项。只需复制生成项目就可以轻松部署的作者插件。系统必备安装 .NET 5 SDK 或更高版本。

注意

示例代码针对 .NET 5,但它使用的所有功能都已在 .NET Core 3.0 中推出,并且在此后所有 .NET 版本中都可用。

创建应用程序

第一步是创建应用程序:

创建新文件夹,并在该文件夹中运行以下命令:

dotnet new console -o AppWithPlugin

为了更容易生成项目,请在同一文件夹中创建一个 Visual Studio 解决方案文件。 运行以下命令:

dotnet new sln

运行以下命令,向解决方案添加应用项目:

dotnet sln add AppWithPlugin/AppWithPlugin.csproj

现在,我们可以填写应用程序的主干。 使用下面的代码替换 AppWithPlugin/Program.cs 文件中的代码:

using PluginBase;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflection;namespace AppWithPlugin{ class Program { static void Main(string[] args) { try { if (args.Length == 1 && args[0] == "/d") { Console.WriteLine("Waiting for any key..."); Console.ReadLine(); } // Load commands from plugins. if (args.Length == 0) { Console.WriteLine("Commands: "); // Output the loaded commands. } else { foreach (string commandName in args) { Console.WriteLine($"-- {commandName} --"); // Execute the command with the name passed as an argument. Console.WriteLine(); } } } catch (Exception ex) { Console.WriteLine(ex); } } }}创建插件接口

使用插件生成应用的下一步是定义插件需要实现的接口。 我们建议创建类库,其中包含计划用于在应用和插件之间通信的任何类型。 此部分允许将插件接口作为包发布,而无需发布完整的应用程序。

在项目的根文件夹中,运行 dotnet new classlib -o PluginBase。 并运行 dotnet sln add PluginBase/PluginBase.csproj 向解决方案文件添加项目。 删除 PluginBase/Class1.cs 文件,并使用以下接口定义在名为 ICommand.cs 的 PluginBase 文件夹中创建新的文件:

namespace PluginBase{ public interface ICommand { string Name { get; } string Description { get; } int Execute(); }}

此 ICommand 接口是所有插件将实现的接口。

由于已定义 ICommand 接口,所以应用程序项目可以填写


比丘资源网 » 使用插件创建 .NET Core 应用程序

发表回复

提供最优质的资源集合

立即查看 了解详情