- 状态:已接受
- 日期:2025(初始提交时)
- 政策澄清:2026-07-24
背景
本库作为 NuGet 包发布,需要支持消费方可能使用的多种 .NET 版本。Bitzsoft 产品线的不同项目运行在不同 .NET 版本上。
决策
产品包统一多目标 net5.0;net8.0;net10.0(Directory.Build.props 默认 net8.0;net10.0,各项目 csproj 普遍覆盖为三目标)。测试项目仅 net8.0;net10.0。总聚合包 Bitzsoft.Integrations.All 仅 net8.0;net10.0。
理由
- net5.0:兼容产品线中仍在运行的 .NET 5 老项目,是当前明确的商业兼容目标。
- net8.0:当前 LTS,大多数生产项目的基线。
- net10.0:最新 LTS,面向新项目。
后果
Bitzsoft.Integrations.Compatibility包应运而生:提供跨 TFM 的 BCL 兼容(CompatibilityArgument.ThrowIfNull等在 net5.0 走自实现,net8+ 走 BCL),几乎被所有包通过global using引入。Directory.Packages.props大量包带Condition="'$(TargetFramework)' == 'net5.0'"为 net5.0 固定兼容降级版本,CPM 文件较复杂。- 第三方 SDK(如 Minio、MailKit)在 net5.0 下的传递依赖兼容问题需要手动处理。
- net5.0 至少必须通过编译、打包资产和兼容性 smoke test。
适用规则
- 所有技术上能够兼容 net5.0 的连接器包都必须目标化
net5.0;net8.0;net10.0。 - 只有上游 SDK、框架能力或产品本身的最低 TFM 明确高于 net5.0 时才允许例外,例如部分 AI、Agent、RAG 与 Semantic Kernel 模块。
- 例外包必须在 csproj、README 和支持矩阵中记录最低 TFM、上游限制与验证证据。
- 新的公共接口不得直接暴露 net8.0+ 专属类型;需要新框架能力时,在实现内部使用条件编译或按 TFM 提供 Adapter。
- 不因 .NET 5 已结束微软官方支持而单方面移除兼容目标。只有产品线确认不再存在 .NET 5 消费者并形成新的 ADR 后,才可重新决策。