Profiles 多租户定制与元包发行机制 (Profile-Driven Compilation & Metapackages)
在大型企业级商业软件交付中,常常面临复杂的“客户版本矩阵”挑战:
- 微型初创团队:只需要最轻量的核心 API(Mini.Api),不需要沉重的复杂工作流与大数据报表;
- 大型政企私有化:需要包含工作流审批、审计分表、私有 S3 对象存储与全套业务模块的完整商务包(Default.Business);
- 集团型多前台门户:需要作为统一 API 网关与聚合入口(Portal)。
如果为每一种交付场景单独维护一套 Git 分支或散落数百个独立的 NuGet 包依赖声明,工程维护将迅速陷入灾难。BitzOrcas.Modern 在 src/Profiles/ 目录下引入了 “Profile 元包聚合(Metapackage Profiles)” 机制,完美解决了依赖组合的原子化管理。
1. Profiles 物理结构与定位
在仓库物理结构中,src/Profiles/ 位于顶级架构分层:
2. 元包 MSBuild 声明契约
元包本身不包含任何 C# 源码文件,它的唯一职责是声明版本、许可与子依赖包的闭包集合。以 BitzOrcas.Profile.Default.Business.csproj 为例:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <TargetFramework>net10.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable>
<!-- 元包标记:只作为包依赖聚合器发布,不输出本地 dll 二进制 --> <IsPackable>true</IsPackable> <PackageId>BitzOrcas.Profile.Default.Business</PackageId> <Title>BitzOrcas Profile — Default Business</Title> <Description>BitzOrcas 租户中性业务系统 Profile,聚合 ORM 中性 Framework、Workflow 与 fail-closed Licensing Runtime;具体 ORM adapter 由 Consumer selector 直接引用。</Description> <PackageLicenseFile>LICENSE.txt</PackageLicenseFile> <Version>1.0.0-alpha1</Version> <PackageVersion>1.0.0-alpha1</PackageVersion> <PackAsTool>false</PackAsTool> <IncludeBuildOutput>false</IncludeBuildOutput> <NoWarn>$(NoWarn);NU5128</NoWarn> </PropertyGroup>
<!-- 由工程治理脚本自动生成的统一包版本清单 --> <Import Project="..\Generated\BitzOrcas.Profile.Default.Business.g.props" />
<ItemGroup> <None Include="..\..\..\LICENSE.txt" Pack="true" PackagePath="\" /> </ItemGroup>
</Project>关键属性解析
<IncludeBuildOutput>false</IncludeBuildOutput>:防止生成空的BitzOrcas.Profile.Default.Business.dll,生成的.nupkg仅包含 nuspec 元数据文件与依赖图;<Import Project="..\Generated\*.g.props" />:依赖闭包由工程目录工具从仓库依赖分析自动生成,杜绝手动修改 nuspec 遗漏依赖版本;<NoWarn>$(NoWarn);NU5128</NoWarn>:抑制 NuGet 关于空程序集的警告。
3. 客户消费端的一键接入体验
对于基于 BitzOrcas 开发的客户业务工程(如 src/Modules/Litigation),其 csproj 文件无需繁琐地声明数十个平台包,只需一行即可引入全套商业运行环境:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <TargetFramework>net10.0</TargetFramework> <Nullable>enable</Nullable> </PropertyGroup>
<ItemGroup> <!-- 一行引入 Default.Business 场景元包,自动获得 Identity、Workflow、Audit 等全部核心能力 --> <PackageReference Include="BitzOrcas.Profile.Default.Business" Version="1.0.0-alpha1" />
<!-- 显式选择本工程偏好的持久化引擎适配器(SqlSugar 或 EF Core) --> <PackageReference Include="BitzOrcas.Infrastructure.SqlSugar" Version="1.0.0-alpha1" /> </ItemGroup>
</Project>4. 相关架构决策与进阶推荐 (Related Deep Dives)
- 业务样板:Sandbox 黄金样例全景拆解
- 模块机制:BitzOrcas.Modularity 模块生命周期与装配
- 决策溯源:ADR 0205:商业包交付与客户扩展模型