状态
Accepted(2026-07-12)。
背景
旧模板把 Domain/Application/Infrastructure 框架源码复制进新项目,暴露了核心实现,并让客户能修改或 fork Framework/Platform——失去了对统一升级、安全修复与商业许可的控制。
决策
Consumer Solution 仅拥有 shell 与业务源码:Host、可读的组合根、组合清单、配置/部署资产、客户自有的 src/Modules/**、测试项目、版本清单、PackageReference 与业务扩展样例。它绝不复制 src/Framework/** 或 src/Platform/** 核心源码。Framework 与 Platform 以版本一致的签名私有 NuGet 包分发;客户仅从认证 Feed 还原。包族保持模块深度(BitzOrcas.Framework.*、BitzOrcas.Platform.<Module>.*、BitzOrcas.Profile.*、BitzOrcas.Licensing.*、BitzOrcas.Sdk)。
授权分三层且互不重叠:Package Entitlement 控制下载(短期最小权限 Feed token),Runtime License 控制某个 edition/feature/version/environment/deployment 能否运行,租户 Feature/Entitlement 由采纳它的业务系统管理,且不得复用 Runtime License 状态模型。撤销 Feed 权限阻断未来的还原/升级,但无法召回已缓存包——因此商业能力不能仅依赖 Feed 认证。
License 是一个深层模块:Host 仅调用稳定的 License 接口,绝不自行解析签名/时钟/缓存/设备绑定/grace。它集中了厂商公钥 + KeyId 轮换、客户/产品/edition/feature/version/environment 检查、在线激活/离线签名文件/本地租约缓存/grace,以及显式的 Valid/Grace/Expired/Revoked/Invalid/Unavailable 状态。新部署、伪造许可或过度授权的特性失败关闭;许可到期不得破坏客户的导出/备份/迁移。
后果
核心实现不再位于客户源码仓库;安全修复与兼容升级通过包版本发布;下载/运行时/租户特性权利形成三个清晰上下文。多数项目默认 IsPackable=false 并需要系统化打包;现场调试更难(受控的 Symbols/诊断);DLL 仍可被反编译,因此私有部署没有绝对的防篡改保证。