Skip to content
Bitzsoft.Integrationsbitzsoft.integrations

Concept

多目标框架策略

net5.0;net8.0;net10.0 三目标框架的含义、兼容性代价和 Compatibility 包的作用。

Last updated

产品包统一多目标 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.Allnet8.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 下的传递依赖兼容问题需要手动处理。

适用规则

  1. 所有技术上能够兼容 net5.0 的连接器包都必须目标化 net5.0;net8.0;net10.0
  2. 只有上游 SDK、框架能力明确要求 net8+ 时才允许例外(如 AI 相关包)。
  3. 例外包必须在 csproj、README 和支持矩阵中记录最低 TFM、上游限制与验证证据。
  4. 新的公共接口不得直接暴露 net8.0+ 专属类型;需要新框架能力时,在实现内部用条件编译。
  5. 不因 .NET 5 已结束微软官方支持而单方面移除兼容目标。

AI 包的例外

AI 相关包因 Microsoft.Extensions.AI.Abstractions 要求 net8+,仅目标 net8.0;net10.0

目标框架原因
AI.Abstractionsnet8;net10Microsoft.Extensions.AI.Abstractions 要求 net8+
AInet8;net10依赖 Abstractions
AI.Anthropicnet8;net10依赖 AI
SemanticKernelnet8;net10上游 SDK 要求
RAGnet8;net10Qdrant 客户端要求
AgentFrameworknet8;net10Microsoft Agent Framework 要求
McpServernet8;net10MCP 协议 SDK 要求

相关

100%

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