Skip to content

FAQ

Applies to PCL N Plugin SDK 0.2.5 · Runtime: Sidecar (see Architecture).

SDK 0.2.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 绑定上下文连接。

插件跑在宿主进程里吗?

产品形态下不跑在 AOT 宿主进程里。PCL N 桌面启动 PCL.Plugin.Sidecar(CoreCLR),第三方插件在 Sidecar 的 ALC 中加载;宿主只做 IPC 与通用 UI 渲染。见 架构与边界

权限是否等于沙箱?

不是。插件在 Sidecar 进程内仍可调用 .NET/OS API;权限约束官方 API 并服务于审核和用户决策,不是操作系统级隔离。

开发时一定要签名吗?

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

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

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

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

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

插件可以自行更新吗?

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

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

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

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

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