产品包统一多目标 net5.0;net8.0;net10.0。三个目标框架各有明确角色,不能用 .NET 5 已结束微软官方支持作为单方面移除兼容目标的理由。
三框架的角色
| 目标框架 | 角色 | 说明 |
|---|---|---|
net5.0 | 硬性商业兼容目标 | 产品线中仍有运行的 .NET 5 老项目 |
net8.0 | 当前 LTS 基线 | 大多数生产项目的基线 |
net10.0 | 最新 LTS | 面向新项目 |
Directory.Build.props 默认 net8.0;net10.0,各项目 csproj 普遍覆盖为三目标:
<!-- Directory.Build.props --><PropertyGroup> <TargetFrameworks>net8.0;net10.0</TargetFrameworks></PropertyGroup>
<!-- 各项目 csproj 覆盖 --><PropertyGroup> <TargetFrameworks>net5.0;net8.0;net10.0</TargetFrameworks></PropertyGroup>测试项目仅 net8.0;net10.0。总聚合包 Bitzsoft.Integrations.All 仅 net8.0;net10.0。
Compatibility 包
跨 TFM 兼容由 Bitzsoft.Integrations.Compatibility 提供。核心模式是 #if NET5_0 条件编译:
public static void ThrowIfNullOrEmpty(string? argument, [CallerArgumentExpression(nameof(argument))] string? paramName = null){#if NET5_0 // ① net5.0 缺失 ArgumentException.ThrowIfNullOrEmpty,自行实现 if (string.IsNullOrEmpty(argument)) throw new ArgumentException("参数值不能为空。", paramName);#else // ② net8+ 直接委托 BCL ArgumentException.ThrowIfNullOrEmpty(argument, paramName);#endif}几乎被所有包通过 global using Bitzsoft.Integrations.Compatibility; 引入。
CPM 条件版本
集中包管理(CPM)大量包带 TFM 条件版本:
<!-- Directory.Packages.props --><PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.10" /><PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0" Condition="'$(TargetFramework)' == 'net5.0'" />第三方 SDK(Minio、MailKit)在 net5.0 下的传递依赖兼容问题需要手动处理。
适用规则
- 所有技术上能够兼容 net5.0 的连接器包都必须目标化
net5.0;net8.0;net10.0。 - 只有上游 SDK、框架能力明确要求 net8+ 时才允许例外(如 AI 相关包)。
- 例外包必须在 csproj、README 和支持矩阵中记录最低 TFM、上游限制与验证证据。
- 新的公共接口不得直接暴露 net8.0+ 专属类型;需要新框架能力时,在实现内部用条件编译。
- 不因 .NET 5 已结束微软官方支持而单方面移除兼容目标。
AI 包的例外
AI 相关包因 Microsoft.Extensions.AI.Abstractions 要求 net8+,仅目标 net8.0;net10.0:
| 包 | 目标框架 | 原因 |
|---|---|---|
| AI.Abstractions | net8;net10 | Microsoft.Extensions.AI.Abstractions 要求 net8+ |
| AI | net8;net10 | 依赖 Abstractions |
| AI.Anthropic | net8;net10 | 依赖 AI |
| SemanticKernel | net8;net10 | 上游 SDK 要求 |
| RAG | net8;net10 | Qdrant 客户端要求 |
| AgentFramework | net8;net10 | Microsoft Agent Framework 要求 |
| McpServer | net8;net10 | MCP 协议 SDK 要求 |