环境搭建
按照以下步骤初始化你的插件项目。
-
准备开发环境
- IDE: Visual Studio 2026
- SDK: .NET 10 SDK
- 宿主源码: 本地需要有
BetterLyrics解决方案,以便引用Core和DevTools。
-
创建项目
创建一个新的 类库(Class Library) 项目,建议以
BetterLyrics.Plugins.PluginType.YourPluginName命名,以保持命名一致性。- 目标框架:
.NET 10(net10.0-windows10.0.26100.0) PluginType可以是Source、Translator、Transliterator、AI等,具体取决于你的插件类型和功能定位。
- 目标框架:
-
配置 .csproj
将你的
.csproj内容替换为下方的模板。此模板连接了整个自动化工具链。BetterLyrics.Plugins.PluginType.YourPluginName.csproj <Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net10.0-windows10.0.26100.0</TargetFramework><ImplicitUsings>enable</ImplicitUsings><Nullable>enable</Nullable><SupportedOSPlatformVersion>10.0.19041.0</SupportedOSPlatformVersion><RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers><EnableDynamicLoading>true</EnableDynamicLoading><Description>[TODO]插件描述</Description><Version>[TODO]插件版本号</Version><Authors>[TODO]插件作者</Authors><RepositoryUrl>[TODO]插件 GitHub 仓库地址</RepositoryUrl><Copyright>[TODO]插件版权信息</Copyright><Company>$(Authors)</Company></PropertyGroup><ItemGroup><ProjectReference Include="..\..\BetterLyrics.Core\BetterLyrics.Core.csproj" ><Private>false</Private><ExcludeAssets>runtime</ExcludeAssets></ProjectReference></ItemGroup><Target Name="AutoExcludeSharedAssemblies" AfterTargets="ResolveAssemblyReferences"><PropertyGroup><HostOutputDir>..\..\BetterLyrics.WinUI3\bin\x64\$(Configuration)\$(TargetFramework)\</HostOutputDir></PropertyGroup><Message Text="[Debug] Searching for Host Assemblies in: $(HostOutputDir)" Importance="High" /><ItemGroup><FilesToCopy Include="@(ReferenceCopyLocalPaths)" /><SharedFiles Include="@(FilesToCopy)" Condition="Exists('$(HostOutputDir)%(Filename)%(Extension)')" /><ReferenceCopyLocalPaths Remove="@(SharedFiles)" /></ItemGroup><Message Text="[Smart Trim] Excluded shared assemblies:%0a@(SharedFiles->' -> %(Filename)%(Extension)', '%0a')" Importance="High" Condition="'@(SharedFiles)' != ''" /></Target><Target Name="RunDevTools" AfterTargets="PostBuildEvent"><PropertyGroup><AnalyzerPath>..\..\BetterLyrics.DevTools\bin\$(Configuration)\$(TargetFramework)\BetterLyrics.DevTools.exe</AnalyzerPath><MainAppConfigDir>..\..\BetterLyrics.WinUI3\PluginConfigs\</MainAppConfigDir><SourceLangDir>$(ProjectDir)Langs\</SourceLangDir><OutputLangDir>$(TargetDir)Langs\</OutputLangDir></PropertyGroup><Message Text="[Analyzer] Generating resources to Project Directory..." Importance="High" /><Exec Command=""$(AnalyzerPath)" "$(TargetPath)" All "$(ProjectDir)\"" /><ItemGroup><FreshLangFiles Include="$(SourceLangDir)*.json" /></ItemGroup><Copy SourceFiles="@(FreshLangFiles)" DestinationFolder="$(OutputLangDir)" /><Copy SourceFiles="$(TargetDir)$(ProjectName)_TrimmingConfig.cs" DestinationFolder="$(MainAppConfigDir)" SkipUnchangedFiles="true" /><Copy SourceFiles="$(TargetDir)$(ProjectName)_TrimmerRoots.xml" DestinationFolder="$(MainAppConfigDir)" SkipUnchangedFiles="true" /></Target><Target Name="PackagePluginToZip" AfterTargets="Build"><PropertyGroup><PackageOutputDir>$(ProjectDir)..\_Dist\$(Configuration)\</PackageOutputDir><ZipFileName>$(AssemblyName).v$(Version).blp</ZipFileName><FinalZipPath>$(PackageOutputDir)$(ZipFileName)</FinalZipPath><StagingDir>$(OutputPath)_TempStaging\</StagingDir></PropertyGroup><ItemGroup><FilesToPack Include="$(OutputPath)**\*" /><FilesToPack Remove="$(OutputPath)$(ProjectName)_TrimmingConfig.cs" /><FilesToPack Remove="$(OutputPath)$(ProjectName)_TrimmerRoots.xml" /><FilesToPack Remove="$(StagingDir)**\*" /></ItemGroup><RemoveDir Directories="$(StagingDir)" /><Copy SourceFiles="@(FilesToPack)" DestinationFolder="$(StagingDir)%(RecursiveDir)" /><ZipDirectory SourceDirectory="$(StagingDir)" DestinationFile="$(FinalZipPath)" Overwrite="true" /><RemoveDir Directories="$(StagingDir)" /><Message Text="[Packager] The plugin package has been generated in the parent directory: $(FinalZipPath)" Importance="High" /></Target></Project>
成功编译一次后,你的项目结构应该如下所示:
文件夹BetterLyrics/
文件夹BetterLyrics.WinUI3/
文件夹PluginConfigs/
- BetterLyrics.Plugins.PluginType.YourPluginName_TrimmerRoots.xml
- BetterLyrics.Plugins.PluginType.YourPluginName_TrimmingConfig.cs
- …
文件夹Plugins/
文件夹_Dist/
文件夹$(Configuration)/
- BetterLyrics.Plugins.PluginType.YourPluginName.vVersion.blp
- …
文件夹BetterLyrics.Plugins.PluginType.YourPluginName/
文件夹Langs/
- en.json
- …
- Config.cs
- Plugin.cs
- BetterLyrics.Plugins.PluginType.YourPluginName.csproj
- …