Skip to content
github-actions[bot] edited this page Jul 14, 2026 · 5 revisions

FAQ

SDK 0.1.0-alpha.5

为什么 PCL.Plugin 不公开?

它是 PCL N 内置特权 Host,包含加载、安全、市场、恢复和桌面桥接实现。第三方只依赖公开 ABI,Host 内部重构才不会破坏插件。

包名为什么是 PCLN.Plugin.*,namespace 却是 PCL.N.Plugin

NuGet 包 ID 避开了已被保留的旧 ID;程序集名与 namespace 保持不变以维护源码和二进制兼容。

可以直接引用 Avalonia 吗?

普通插件优先使用声明式 AXAML。Raw Avalonia 属于高风险可选能力,必须由 Host 支持并获得权限;不要依赖启动器控件类或 Visual Tree。

AXAML 能写代码隐藏吗?

不能。首版只支持无 x:Class 的声明式 AXAML,行为通过公开命令 ID 和 Host 绑定上下文连接。

权限是否等于沙箱?

不是。插件在进程内运行,权限约束官方 API 并服务于审核和用户决策,不是操作系统隔离。

开发时一定要签名吗?

必须签名。PclNPluginSign=false 只会切换到 SDK 自动创建的本机开发密钥,不会生成未签名包;PCL N 始终拒绝未签名包。本机开发密钥包可手动调试,但插件中心只接受发布者正式密钥自签名候选包,并在审核后追加网站签名。

为什么插件已经安装却无法启用?

常见原因是 required 前置/服务缺失、版本范围不兼容、安全模式、签名策略、入口异常或与另一插件冲突。查看“已安装”、开发者日志和 故障排查

能把 PCL.N.Plugin.Abstractions.dll 放进 .pnp 吗?

不能。它由 Host 共享。私带副本会造成 ABI 类型身份冲突,构建器会主动排除。

插件可以自行更新吗?

不要绕过宿主修改安装目录。通过插件中心和 Host 更新流程分发新 SemVer 版本,才能保留签名验证、原子切换和回滚。

可以读取其他插件的数据吗?

不应。使用自己的 context.Directories 和设置存储。跨插件协作应通过明确的依赖与未来公开服务契约完成。

为什么停用后 DLL 仍被占用?

通常是静态引用、未取消任务、事件订阅或未释放资源导致 AssemblyLoadContext 无法卸载。所有注册和资源都应交给 Lifetime。

Clone this wiki locally