-
Notifications
You must be signed in to change notification settings - Fork 0
Troubleshooting
MuXue1230 edited this page Jul 14, 2026
·
4 revisions
SDK
0.1.0-alpha.4
确认包 ID 使用 PCLN.Plugin.*,不是旧的 PCL.N.Plugin.*:
dotnet nuget list source
dotnet add package PCLN.Plugin.Abstractions --version 0.1.0-alpha.4 --source https://api.nuget.org/v3/index.json清理失败缓存:
dotnet nuget locals all --clear
dotnet restore检查:
- 已引用
PCLN.Plugin.Sdk.Build; -
<PclNPluginBuildEnabled>true</PclNPluginBuildEnabled>; - 已设置
PclNPluginId; -
plugin.json存在于PclNPluginManifest指向的位置; - 运行的是真正 Build,不是仅设计时构建。
缺少 PclNPluginId:
<PclNPluginId>dev.example.plugin</PclNPluginId>它必须与 Manifest id 一致。
通用包不是 AnyCPU。纯托管插件使用:
<PlatformTarget>AnyCPU</PlatformTarget>架构专用包则设置 PclNPluginRuntimeIdentifier。
- Manifest 使用
ui/...axaml; - 路径只用
/,不含..或反斜杠; - 文件实际存在于
PclNPluginContentRoot下; - 不含
x:Class或私有宿主 CLR 命名空间。
gpg --version
gpg --list-secret-keys --with-subkey-fingerprint确认:
-
gpg可执行; - Manifest 使用完整主密钥指纹;
- 私钥/签名子密钥存在且未过期、未吊销;
- CI 已导入私钥并能非交互使用;
- 没有把短 Key ID 当作指纹。
按顺序检查:
- ZIP 路径和文件表是否安全;
- 每个文件 SHA-256 是否匹配;
- OpenPGP 签名与 Manifest 指纹是否匹配;
-
entryPoint.assembly是否存在; - API/Host/服务版本范围是否兼容;
- required 前置是否安装且启用;
- 是否误带共享或私有宿主程序集。
打开“设置 → 插件 → 已安装”查看缺少的 ID 和版本范围。先安装并启用 required 前置,再启用当前插件。检查依赖图是否出现环。
- required 服务不可用;
- Manifest 不兼容另一已启用插件;
- Plugin Safe Mode 已开启;
- 未签名插件没有开发者模式授权;
-
InitializeAsync抛出异常; - 入口类型不符合要求。
- Surface ID、版本范围或 Slot 不匹配;
-
access和权限缺失; - UI Safe Mode 跳过高风险 Patch;
- AXAML 安全验证失败;
- Patch 与其他插件冲突;
-
fallback让可选功能被禁用。
在开发者模式中显示“UI Patch”和“兼容性”页面查看计划与冲突。
保存注册结果并调用:
context.Lifetime.Track(registration);通常表示插件保留了静态引用、事件订阅、后台线程或未释放资源:
- 避免静态保存宿主服务或插件实例;
- 所有注册交给 Lifetime;
- 后台工作使用
IPluginTaskService; - 取消后等待任务结束;
- 释放流、Watcher、Timer 和原生句柄。