bitzorcas-host 是一个原生 dotnet new Solution 模板。调用者选择一个完整 ProfileChoice 和一个 RuntimeAdapter,模板直接复制对应的已验证资产树,并按 Profile 条件保留平台模块或行业扩展。客户项目中没有第二阶段组合器。
[!NOTE] 从零建新工程优先考虑 bitz 脚手架:场景预设向导与正交维度(含 Website/RiskControl 平台能力与 ReactAdmin 等前端选项)比模板矩阵的 15 组合覆盖面更宽。本页的 Profile 矩阵面向需要精确验证单一组合的团队与存量模板消费者。两通道以同一已验证消费者工程为契约基线,模板矩阵的退役条件登记在
0004-template-upgrade-map.json。
先分清四组数字
| 数字 | 含义 | 为什么不同 |
|---|---|---|
| 15 | 公开 ProfileChoice | 每个值都是可直接生成的完整方案 |
| 2 | RuntimeAdapter | sqlsugar、efcore |
| 30 | 物理生成路径 | 15 Profile × 2 ORM |
| 3 / 6 | 基础拓扑 / 原生资产树 | 三类拓扑分别维护两个 ORM 版本 |
“15 个正式组合”指公开 Profile,不是 30;ORM 选择不会新增业务 Profile,但会改变实际包引用、Provider 注册和 Schema 接线。
Help 文本就是这份选择面的权威呈现。下面终端窗取自 dotnet new bitzorcas-host --help 与三档典型选型的真实运行输出(窄终端折行按逻辑行收敛,通用 dotnet new 选项略去):
若本机 Help 与上面面板不一致(多出旧拆分式选择器或内部推导参数),先按故障排查核对安装版本与包通道,不要继续按旧命令生成。
解析模型
BaseProfileChoice、PlatformModule 与 IndustryExtension 是模板内部推导值,不是公开命令参数。Help 暴露它们应视为模板合同回归。
三类基础拓扑
| 基础 Profile | Workload | Tenancy | Deployment | 项目形态 |
|---|---|---|---|---|
mini-api-single | API | single | none | API、ServiceDefaults、Unit Tests、Architecture Tests |
default-business-single | business | single | none | Mini Host 基础 + Business Starter Contracts/Application |
default-business-multi | business | multi | aspire | Single Business 基础 + AppHost |
当前公开模板不生成 JobHost、Website、MiniApp、Integration Worker、Container 或 Kubernetes 资产。这些能力属于后续独立采用或部署流水线,不能通过猜测参数启用。
15 个公开 Profile
| ProfileChoice | 租户 / 部署 | 可选闭包 |
|---|---|---|
mini-api-single | single / none | 无 Business Starter、平台模块或行业扩展 |
default-business-single | single / none | Business Starter |
default-business-single-authorization | single / none | Authorization 运行时模块 |
default-business-single-masterdata | single / none | MasterData 运行时模块 |
default-business-single-finance | single / none | Finance 扩展 |
default-business-single-hr | single / none | HR 扩展 |
default-business-single-auction | single / none | Auction 扩展 |
default-business-single-legal | single / none | Legal 扩展 |
default-business-multi | multi / aspire | Business Starter |
default-business-multi-authorization | multi / aspire | Authorization 运行时模块 |
default-business-multi-masterdata | multi / aspire | MasterData 运行时模块 |
default-business-multi-finance | multi / aspire | Finance 扩展 |
default-business-multi-hr | multi / aspire | HR 扩展 |
default-business-multi-auction | multi / aspire | Auction 扩展 |
default-business-multi-legal | multi / aspire | Legal 扩展 |
平台模块和行业扩展不是同一种接线:
authorization、masterdata会把对应 Platform 运行时包、配置和采用测试放入闭包;finance、hr、auction、legal以行业扩展包进入 Business Starter Application;auction和legal的依赖闭包可能包含 Finance 包,但 Profile 的industryExtension仍分别是auction、legal;- 一个 Profile 只选择一个公开后缀;需要跨扩展组合时,由客户项目在生成后按各模块采用合同完成,不修改生成 manifest 伪造支持。
ORM 是物理选择
RuntimeAdapter 不是注释字段。SqlSugar 输出调用 SqlSugar 注册与 Schema 路径,EF Core 输出调用 EF Core 注册并包含 EF Migration contribution。模板验证会检查选中 Provider 存在、另一 Provider 不在依赖闭包。
# 基线:生成 SqlSugar 物理接线。dotnet new bitzorcas-host -n Acme.Sql \ --ProfileChoice default-business-single \ --RuntimeAdapter sqlsugar
# 对照:相同 Profile 只替换为 EF Core。dotnet new bitzorcas-host -n Acme.Ef \ --ProfileChoice default-business-single \ --RuntimeAdapter efcore团队应在项目建立时确定 ORM。模板不是运行时双 Provider 切换器;后续切换属于持久化迁移,需要重新评估模型、Schema、事务和回归测试。
选择顺序
按下面四个问题选型:
- 只验证框架 Shell,还是立即建立业务模块?前者选 Mini,后者选 Business。
- 请求是否必须从已验证 JWT 的
tenant_id解析多个租户?是则选 Multi。 - 首批业务是否必须采用 Authorization、MasterData 或一个行业扩展?选择对应后缀。
- 团队生产基线使用 SqlSugar 还是 EF Core?选择唯一 RuntimeAdapter。
如果答案仍不确定,先用 mini-api-single 做 Feed、License、OpenAPI 和部署探针,不要把它当成生产业务 Profile。Mini 不生成 Business Starter,也不提供多租户或 Aspire 拓扑。
典型选择
最小 API 验证
dotnet new bitzorcas-host -n Acme.Probe \ --ProfileChoice mini-api-single \ --RuntimeAdapter sqlsugarDevelopment 可直接运行 API,不依赖 SQL Server 或 RabbitMQ,适合验证首次成功路径。
单租户法律业务
dotnet new bitzorcas-host -n Acme.Cases \ --ProfileChoice default-business-single-legal \ --RuntimeAdapter efcore输出包含 Business Starter 与 Legal 扩展包,但业务规则、权限目录、数据迁移和生产认证仍由客户团队实现。
多租户授权平台
dotnet new bitzorcas-host -n Acme.Platform \ --ProfileChoice default-business-multi-authorization \ --RuntimeAdapter sqlsugarAppHost 编排 SQL Server、Schema Migrator 和 API;Authorization 变体还增加 RabbitMQ、授权 bootstrap 与独立持久化身份参数。
生成边界
模板会生成:
- Consumer 拥有的 Host、Starter Module 和测试源码;
Directory.Packages.props、NuGet.Config与商业包引用;- ORM、租户、OpenAPI、License、Health 和 Schema 的 Host 接线;
composition-manifest.json、Schema 与composition-plan.json;- 对 Platform/Industry 采用结果的行为测试。
模板不会生成完成的业务系统,也不会复制 src/Framework/** 或 src/Platform/**。前端、生产 Secret、正式 License、数据库数据迁移、容器编排资产和业务验收均在模板范围之外。
验证强度
底座模板门禁先真实生成全部 30 条物理路径,再对 22 条分层组合执行商业包 Restore、Build、Test、Publish,对其中 10 条执行裁剪发布。该模板门禁是独立发布证据,不等同于主仓库日常合并门禁。
Consumer 团队仍应针对自己的精确 Profile 执行:
# 按 Restore → Build → Test → API Publish 保留可重复的验证证据。dotnet restore <Solution>.slnxdotnet build <Solution>.slnx --configuration Release --no-restoredotnet test <Solution>.slnx --configuration Release --no-build --no-restoredotnet publish src/Hosts/<Name>.Api/<Name>.Api.csproj \ --configuration Release --no-build --no-restore