Skip to content
Bitzsoft.Integrationsbitzsoft.integrations

Reference

ADR-0002:多目标框架 net5/8/10

产品包统一多目标 net5.0;net8.0;net10.0 的设计决策与适用规则。

Last updated
  • 状态:已接受
  • 日期: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.Allnet8.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。

适用规则

  1. 所有技术上能够兼容 net5.0 的连接器包都必须目标化 net5.0;net8.0;net10.0
  2. 只有上游 SDK、框架能力或产品本身的最低 TFM 明确高于 net5.0 时才允许例外,例如部分 AI、Agent、RAG 与 Semantic Kernel 模块。
  3. 例外包必须在 csproj、README 和支持矩阵中记录最低 TFM、上游限制与验证证据。
  4. 新的公共接口不得直接暴露 net8.0+ 专属类型;需要新框架能力时,在实现内部使用条件编译或按 TFM 提供 Adapter。
  5. 不因 .NET 5 已结束微软官方支持而单方面移除兼容目标。只有产品线确认不再存在 .NET 5 消费者并形成新的 ADR 后,才可重新决策。

相关

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%