FAQ
SDK
0.1.0-alpha.4
为什么 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 并服务于审核和用户决策,不是操作系统隔离。
开发时一定要签名吗?
构建器允许显式关闭签名,但 PCL N 默认拒绝未签名包。只有完成开发者授权并启用对应选项后才能本地调试;正式分发必须签名。
为什么插件已经安装却无法启用?
常见原因是 required 前置/服务缺失、版本范围不兼容、安全模式、签名策略、入口异常或与另一插件冲突。查看“已安装”、开发者日志和 故障排查。
能把 PCL.N.Plugin.Abstractions.dll 放进 .pnp 吗?
不能。它由 Host 共享。私带副本会造成 ABI 类型身份冲突,构建器会主动排除。
插件可以自行更新吗?
不要绕过宿主修改安装目录。通过插件中心和 Host 更新流程分发新 SemVer 版本,才能保留签名验证、原子切换和回滚。
可以读取其他插件的数据吗?
不应。使用自己的 context.Directories 和设置存储。跨插件协作应通过明确的依赖与未来公开服务契约完成。
为什么停用后 DLL 仍被占用?
通常是静态引用、未取消任务、事件订阅或未释放资源导致 AssemblyLoadContext 无法卸载。所有注册和资源都应交给 Lifetime。
