Skip to content

创建插件项目

我们首先需要在VS中新建一个WinUI类库

winui

编写默认元数据

默认提供了四个元数据项

  • Id:插件Id
  • Name:插件名称
  • Version:插件版本
  • Dependencies:插件依赖

元数据项(除了Dependencies)均在<PropertyGroup><PluginMeta>中设置

xml
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
        <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
        <RootNamespace>ShadowExample.Plugin.Emoji</RootNamespace>
        <RuntimeIdentifiers>win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
        <UseWinUI>true</UseWinUI>
        <GeneratePackageOnBuild>false</GeneratePackageOnBuild>
        <NoWarn>MSB3277</NoWarn>
        <!-- Nuget -->
        <PackageId>ShadowExample.Plugin.Emoji</PackageId>
        <Version>1.0.0.12</Version>
        <!-- PluginMeta -->
        <PluginMeta>
            <!-- 使用上文的PackageId变量 -->
            <Id>$(PackageId)</Id>
            <Name>emoji</Name>
            <Version>$(Version)</Version>
        </PluginMeta>
    </PropertyGroup>
</Project>

说明

<PluginMeta>中可以使用MSBuild的属性变量

元数据项Dependencies用于指明插件的依赖插件,让插件在依赖插件加载后再加载

与常规元数据项不同,需要在.csproj中的<ItemGroup>里设置

同时他作为项目的nuget

必须指明Label="Dependencies"

xml
<ItemGroup Label="Dependencies">
    <PackageReference Include="ShadowExample.Plugin.Hello" Version="1.2.1.2" />
    <PackageReference Include="ShadowExample.Plugin.World" Version="1.3.0.0" />
</ItemGroup>

编写数组形式的元数据项

有一些元数据项的类型为数组,例如:string[]

此时我们需要一些特殊格式进行编写

  • ;分割
    xml
      <Authors>kitUIN;Hello</Authors>
  • 使用<Item>
    xml
      <Authors>
          <Item>kitUIN</Item>
          <Item>Hello</Item> 
      </Authors>

编写更多元数据项

在你的插件加载器中应当设置了自己的元数据项

更多的元数据项应当填写在<PropertyGroup><PluginMeta>

插件加载器开发者应当说明需要哪些元数据项

插件主类

插件主类需要继承插件加载器中的自定义的插件基类

并且必须使用[AutoPluginMeta]特性自动生成元数据

csharp
// 示例的插件主类
namespace ShadowViewer.Plugin.Local;

[AutoPluginMeta]
public partial class LocalPlugin : PluginBase
{
}
csharp
// 自动生成的LocalPlugin.g.cs
// Automatic Generate From ShadowPluginLoader.SourceGenerator
using ShadowViewer.Plugins;

namespace ShadowViewer.Plugin.Local
{
    [PluginMetaData(Id = "ShadowViewer.Plugin.Local", Name = "本地阅读插件", Version = "1.0.5.18")]
    public partial class LocalPlugin
    {
        /// <summary>
        /// PluginMetaData
        /// </summary>
        public static PluginMetaData Meta { get; } = new PluginMetaData
        {
            Id = "ShadowViewer.Plugin.Local",
            Name = "本地阅读插件",
            Version = "1.0.5.18"
        };
    }
}

你可以直接使用LocalPlugin.Meta来获取插件的元数据信息

后续编写

接下来,你可以选择覆写插件基类中的默认方法

或者