Skip to content

创建插件元数据类 ​

加载器需要知道插件叫什么、版本是多少、依赖哪些插件。这些信息就是“元数据”。

在 SDK 中新建 ExampleMetaData.cs,继承 BasePluginMetaData。常用信息已经由基类提供,我们再加上作者和网址:

ExampleMetaData.cs
csharp
using ShadowPluginLoader.Attributes;
using ShadowPluginLoader.WinUI;

namespace ShadowExample.Core.Plugins;

[ExportMeta]
public record ExampleMetaData : BasePluginMetaData
{
    [Meta(Required = false)]
    public string[] Authors { get; init; } = [];

    [Meta(Required = false)]
    public string? Url { get; init; }
}

[ExportMeta] 告诉构建工具,用这个类生成 plugin.d.json。每个 SDK 选一个元数据类加上这个特性就可以了。

已经有哪些信息 ​

下面这些属性可以直接使用:

属性类型用来做什么
Id / Namestring插件的唯一标识和名称
VersionNuGetVersion插件版本,在 JSON 中写成字符串
SdkVersionVersionRange插件支持的 SDK 版本范围
Priorityint加载优先级,默认 0,数字越小越早加载;依赖插件会先加载
DependenciesPluginDependency[]依赖哪些插件,以及它们的版本要求
DllNamestring插件程序集名称,不含 .dll
BuiltInbool是否为内置插件,可用 [MainPlugin(BuiltIn = true)] 设置
RawJsonElement原始 JSON 信息
MainPluginType插件主类的类型
EntryPointsPluginEntryPointType[]插件提供的其他入口点

SdkVersion 一般不用自己填。比如 SDK 的程序集版本是 1.3.1.0,工具会填入 [1.3, 1.4),表示支持 1.3 系列的 SDK。加载时会用这个范围检查 SDK 是否兼容。

添加自己的信息 ​

像示例里的 Authors 和 Url 一样,添加属性并标上 [Meta] 就可以了。一般使用 { get; init; };数组和嵌套对象也能使用。可选属性记得给默认值,或者加上 ?。

Meta 的常用设置如下:

设置默认值用法
Requiredtrue是否必须填写
Excludefalse设为 true 后,不写入元数据定义文件
Regexnull用正则表达式检查字符串格式
AsStringfalse在定义文件中把属性设为字符串类型
Converternull指定 System.Text.Json 转换器类型,需要无参构造函数

AsString 只决定定义文件中的类型。如果自定义类型需要从字符串转换,还要提供转换器;版本和依赖信息已经有内置支持。

插件如何填写这些信息,可以接着看创建插件项目。额外入口点的用法放在入口点一节。