解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
|
# NewLife.Core 功能清单
> 版本:v12 | 日期:2026-10-19 | 从代码逆向整理 + 审计
本文档以 Mx-y 编码追踪 NewLife.Core 全部功能点的实现、测试和注释状态。需求定义见[需求文档](/NewLife/X/Blob/dev/Doc/需求文档.md),架构设计见[架构设计](/NewLife/X/Blob/dev/Doc/架构设计.md)。
## 统计
| 指标 | 数值 |
|------|:----:|
| 功能点总数 | 129 |
| 实现完成(✅) | 127 |
| 实现废弃(⛔) | 2 |
| 测试通过(✅) | 126 |
| 测试通过(🟡 环境敏感) | 1 |
| 测试缺失(❌) | 0 |
| 测试不适用(—) | 2 |
| 测试排除(⛔) | 0 |
| 注释完整(✅) | 127 |
| 注释待完善(🟡) | 0 |
| 注释不适用(—) | 2 |
---
## M1 基础扩展
| 编码 | 功能 | 实现 | 测试 | 注释 | 说明 |
|------|------|:----:|:----:|:----:|------|
| M1-1 | 类型转换 | ✅ | ✅ | ✅ | `Utility.cs` ToInt/ToBoolean/ToDateTime 等 |
| M1-2 | 字符串扩展 | ✅ | ✅ | ✅ | `StringHelper.cs` |
| M1-3 | 路径扩展 | ✅ | ✅ | ✅ | `PathHelper.cs`,含 PathHelperHashTests |
| M1-4 | 数据扩展 | ✅ | ✅ | ✅ | `IOHelper.cs` |
| M1-5 | 进程扩展 | ✅ | ✅ | ✅ | `ProcessHelper.cs` |
| M1-6 | 运行时信息 | ✅ | ✅ | ✅ | `Runtime.cs` |
| M1-7 | 可销毁基类 | ✅ | ✅ | ✅ | `DisposeBase.cs` |
| M1-8 | 反射扩展 | ✅ | ✅ | ✅ | `Reflect.cs`, `AssemblyX.cs` |
| M1-9 | 拼音库 | ✅ | ✅ | ✅ | `PinYin.cs` |
| M1-10 | 弱引用委托 | ✅ | ✅ | ✅ | `WeakAction.cs` |
| M1-11 | 时间提供者 | ✅ | ✅ | ✅ | `TimeProvider.cs` 跨版本统一时间抽象,低版本 .NET 兼容填充,含 TimeProviderTests |
| M1-12 | 字典数据源 | ✅ | ✅ | ✅ | `IDictionarySource.cs` 对象转名值字典接口,SystemJson 转换器覆盖 |
| M1-13 | 机器信息 | ✅ | ✅ | ✅ | `MachineInfo.cs` 获取操作系统/硬件信息,支持 Windows、Linux、Android 和 iOS,含 MachineInfoTests |
## M2 日志与追踪
| 编码 | 功能 | 实现 | 测试 | 注释 | 说明 |
|------|------|:----:|:----:|:----:|------|
| M2-1 | 统一日志接口 | ✅ | ✅ | ✅ | `ILog.cs` |
| M2-2 | 文件日志 | ✅ | ✅ | ✅ | `TextFileLog.cs` |
| M2-3 | 控制台日志 | ✅ | ✅ | ✅ | `ConsoleLog.cs` |
| M2-4 | 网络日志 | ✅ | ✅ | ✅ | `NetworkLog.cs` |
| M2-5 | 组合日志 | ✅ | ✅ | ✅ | `CompositeLog.cs` |
| M2-6 | 链路追踪 | ✅ | ✅ | ✅ | `ITracer.cs` + `DefaultTracer`,有 TracerTests |
| M2-7 | 性能计数器 | ✅ | ✅ | ✅ | `PerfCounter.cs` |
| M2-8 | 日志级别控制 | ✅ | ✅ | ✅ | `LevelLog.cs` |
| M2-9 | 全局日志入口 | ✅ | ✅ | ✅ | `XTrace.cs` |
| M2-10 | ETW 日志监听 | ✅ | ✅ | ✅ | `LogEventListener.cs`,含 LogEventListenerTests |
| M2-11 | OpenTelemetry 输出适配 | ✅ | ✅ | ✅ | `OpenTelemetryTracer.cs`,把 NewLife 埋点转成标准 Activity(net6.0+),含 OpenTelemetryTracerTests |
| M2-12 | OpenTelemetry 埋点采集 | ✅ | ✅ | ✅ | `OpenTelemetryCollector.cs`,把第三方 ActivitySource 埋点转成星尘埋点(net6.0+),含 OpenTelemetryCollectorTests |
| M2-13 | 多语言本地化 | ✅ | ✅ | ✅ | `Localization.cs`/`L.cs` + 内置语言表,31 种语言;异常/日志/配置注释统一翻译,默认英文源文并回退英文;含 LocalizationTests/DownstreamLocalizationTests;`RequestCultureScope`、`IsSupported`、`GetLanguages`、`Setting.Language`;`HttpServer`/`HttpSession` 默认按请求 `Accept-Language` 设置 UI 文化 |
## M3 定时调度
| 编码 | 功能 | 实现 | 测试 | 注释 | 说明 |
|------|------|:----:|:----:|:----:|------|
| M3-1 | 高级定时器 | ✅ | ✅ | ✅ | `TimerX.cs` |
| M3-2 | Cron 表达式 | ✅ | ✅ | ✅ | `Cron.cs` |
| M3-3 | 定时调度器 | ✅ | ✅ | ✅ | `TimerScheduler.cs` |
| M3-4 | 线程池扩展 | ✅ | ✅ | ✅ | `ThreadPoolX.cs` |
## M4 序列化
| 编码 | 功能 | 实现 | 测试 | 注释 | 说明 |
|------|------|:----:|:----:|:----:|------|
| M4-1 | Span 读取器 | ✅ | ✅ | ✅ | `SpanReader.cs` 零分配高性能二进制流解析器,支持大小端 |
| M4-2 | Span 写入器 | ✅ | ✅ | ✅ | `SpanWriter.cs` 零分配高性能二进制数据写入器,支持大小端 |
| M4-3 | Span 辅助 | ✅ | ✅ | ✅ | `SpanHelper.cs` Span/ReadOnlySpan 扩展方法集 |
| M4-4 | 池化写入器 | ✅ | ✅ | ✅ | `PooledByteBufferWriter.cs` 基于 ArrayPool 的高效缓冲写入器,含 PooledByteBufferWriterTests |
| M4-5 | JSON 序列化 | ✅ | ✅ | ✅ | `Json.cs`,JsonParser + JsonReader 均有测试 |
| M4-6 | XML 序列化 | ✅ | ✅ | ✅ | `Xml.cs`,含 XmlTests + XmlParserTests |
| M4-7 | 二进制序列化 | ✅ | ✅ | ✅ | `Binary.cs` |
| M4-8 | Span 序列化 | ✅ | ✅ | ✅ | `SpanSerializer.cs` |
| M4-9 | CSV 解析 | ✅ | ✅ | ✅ | `CsvFile.cs` |
| M4-10 | CSV 数据库 | ✅ | ✅ | ✅ | `CsvDb.cs` |
| M4-11 | Excel 读取 | ✅ | ✅ | ✅ | `ExcelReader.cs` + `ExcelWriter.cs` |
| M4-12 | 序列化辅助 | ✅ | ✅ | ✅ | `SerialHelper.cs` |
| M4-13 | 类型转换器 | ✅ | ✅ | ✅ | `SafeInt64Converter`/`LocalTimeConverter` 有测试,含 TypeConverterTests |
| M4-14 | 序列读取器 | ✅ | ✅ | ✅ | `SequenceReader<T>`(低版本框架经 Stub 垫片补齐,全 TFM 可用)+ `SequenceReaderHelper` 扩展方法集,含 SequenceReaderHelperTests/SequenceReaderCompatTests |
## M5 配置系统
| 编码 | 功能 | 实现 | 测试 | 注释 | 说明 |
|------|------|:----:|:----:|:----:|------|
| M5-1 | 泛型配置基类 | ✅ | ✅ | ✅ | `Config.cs` |
| M5-2 | JSON 配置提供者 | ✅ | ✅ | ✅ | `JsonConfigProvider.cs` |
| M5-3 | XML 配置提供者 | ✅ | ✅ | ✅ | `XmlConfigProvider.cs` |
| M5-4 | INI 配置提供者 | ✅ | ✅ | ✅ | `IniConfigProvider.cs` |
| M5-5 | HTTP 远程配置 | ✅ | ✅ | ✅ | `HttpConfigProvider.cs` |
| M5-6 | Apollo 配置 | ✅ | ✅ | ✅ | `ApolloConfigProvider.cs`,含 ApolloConfigProviderTests |
| M5-7 | 命令行解析 | ✅ | ✅ | ✅ | `CommandParser.cs` |
| M5-8 | 核心配置 | ✅ | ✅ | ✅ | `Setting.cs`,含 SettingTests |
| M5-9 | 文件配置提供者 | ✅ | ✅ | ✅ | `FileConfigProvider.cs` |
| M5-10 | 系统配置 | ✅ | ✅ | ✅ | `SysConfig.cs` 基于 Config<T> 的系统名称/版本等基本设置,含 SysConfigTest |
## M6 安全加密
| 编码 | 功能 | 实现 | 测试 | 注释 | 说明 |
|------|------|:----:|:----:|:----:|------|
| M6-1 | 统一加密扩展 | ✅ | ✅ | ✅ | `SecurityHelper.cs` |
| M6-2 | RSA 加密 | ✅ | ✅ | ✅ | `RSAHelper.cs` |
| M6-3 | DSA 签名 | ✅ | ✅ | ✅ | `DSAHelper.cs` |
| M6-4 | 国密 SM4 | ✅ | ✅ | ✅ | `SM4.cs` |
| M6-5 | RC4 流加密 | ✅ | ✅ | ✅ | `RC4.cs` |
| M6-6 | CRC 校验 | ✅ | ✅ | ✅ | `Crc16.cs`/`Crc32.cs` |
| M6-7 | MurmurHash | ✅ | ✅ | ✅ | `Murmur128.cs` |
| M6-8 | 密码策略 | ✅ | ✅ | ✅ | `IPasswordProvider.cs` |
| M6-9 | 随机数 | ✅ | ✅ | ✅ | `Rand.cs` |
| M6-10 | 加密填充 | ✅ | ✅ | ✅ | `PKCS7PaddingTransform.cs`,含 PKCS7PaddingTransformTests |
| M6-11 | ASN.1 编解码 | ✅ | ✅ | ✅ | `Asn1.cs`/`Asn1Tags.cs` |
| M6-12 | ECDSA 签名 | ✅ | ✅ | ✅ | `ECDsaHelper.cs`/`ECKey.cs`,含 ECDsaHelperTests(XUnitTest.Compat 双分支:net462 CNG / net8.0 跨平台) |
## M7 应用框架
| 编码 | 功能 | 实现 | 测试 | 注释 | 说明 |
|------|------|:----:|:----:|:----:|------|
| M7-1 | IoC 容器 | ✅ | ✅ | ✅ | `ObjectContainer.cs` |
| M7-2 | 应用主机 | ✅ | ✅ | ✅ | `Host.cs`,含 HostTests(已修复并启用) |
| M7-3 | 插件框架 | ✅ | ✅ | ✅ | `IPlugin.cs` 接口 + `PluginManager`,含 PluginManagerTests |
| M7-4 | Actor 并发 | ✅ | ✅ | ✅ | `Actor.cs` |
| M7-5 | 管道模型 | ⛔ | — | — | 已退役,由协议模式(帧泵 `MessagePump` + 无状态 `IMessageCodec`)取代,见《消息协议栈》 |
| M7-6 | 延迟队列 | ✅ | ✅ | ✅ | `DeferredQueue.cs` |
| M7-7 | 事件总线 | ✅ | ✅ | ✅ | `EventBus.cs`/`EventHub.cs`,含集成测试 |
| M7-8 | 消息接口 | ✅ | ✅ | ✅ | `IMessage.cs` 纯数据契约(`Kind`/`Reply`/`OneWay` 方向语义),消息不再池化,含 MessageContractTests/MessageDisposeTests |
## M8 缓存系统
| 编码 | 功能 | 实现 | 测试 | 注释 | 说明 |
|------|------|:----:|:----:|:----:|------|
| M8-1 | 统一缓存接口 | ✅ | ✅ | ✅ | `ICache.cs` 接口,以 MemoryCache 实现做契约测试(ICacheContractTests) |
| M8-2 | 内存缓存 | ✅ | ✅ | ✅ | `MemoryCache.cs`,含 MemoryQueue |
| M8-3 | 缓存基类 | ✅ | ✅ | ✅ | `Cache.cs`,通过 MemoryCache 间接覆盖 |
| M8-4 | 缓存提供者 | ✅ | ✅ | ✅ | `CacheProvider.cs` |
| M8-5 | 缓存锁 | ✅ | ✅ | ✅ | `CacheLock.cs`,含 TestLock1-3 在 MemoryCacheTests |
| M8-6 | 内存队列 | ✅ | ✅ | ✅ | `MemoryQueue<T>`(在 MemoryCache.cs) |
| M8-7 | 对象池 | ✅ | ✅ | ✅ | `Pool.cs` + `ObjectPool.cs` |
| M8-8 | 生产者消费者接口 | ✅ | ✅ | ✅ | `IProducerConsumer.cs` 轻量级队列抽象接口,以 MemoryQueue 做契约测试(IProducerConsumerTests) |
| M8-9 | 消息队列事件总线 | ✅ | ✅ | ✅ | `QueueEventBus.cs` 基于缓存队列的分布式事件总线,含 QueueEventBusTests |
## M9 数据与算法
| 编码 | 功能 | 实现 | 测试 | 注释 | 说明 |
|------|------|:----:|:----:|:----:|------|
| M9-1 | 模型数据接口 | ✅ | ✅ | ✅ | `IModel.cs` 字符串键索引模型属性接口,含 IModelTests |
| M9-2 | 扩展数据接口 | ✅ | ✅ | ✅ | `IExtend.cs` 对象扩展属性字典接口,含 IExtendTests |
| M9-3 | 数据过滤器 | ✅ | ✅ | ✅ | `IFilter.cs` 责任链过滤器模式,含 IFilterTests |
| M9-4 | 数据包接口 | ✅ | ✅ | ✅ | `IPacket.cs` 零拷贝切片(引用计数共享、可 `using` 释放)与链式包接口,IPacketTests |
| M9-5 | 数据包实现 | ✅ | ✅ | ✅ | `ArrayPacket`/`OwnerPacket`(`OwnerPacket` 引用计数内核:共享切片各自释放、引用归零归还;过时 `Packet` 类已删除) |
| M9-6 | 数据包编码器 | ✅ | ✅ | ✅ | `IPacketEncoder.cs` + `DefaultPacketEncoder` 对象与数据包互转,含 IPacketEncoderTests |
| M9-7 | 环形缓冲区 | ✅ | ✅ | ✅ | `RingBuffer.cs` 通用环形缓冲(网络协议组包由数据管道 + 帧泵承担) |
| M9-8 | 雪花 ID | ✅ | ✅ | ✅ | `Snowflake.cs` |
| M9-9 | 经纬度哈希 | ✅ | ✅ | ✅ | `GeoHash.cs` + `GeoPoint.cs` |
| M9-10 | 内存数据表 | ✅ | ✅ | ✅ | `DbTable.cs` + `DbRow.cs` |
| M9-11 | 分页参数 | ✅ | ✅ | ✅ | `PageParameter.cs` |
| M9-12 | 采样插值框架 | ✅ | ✅ | ✅ | `IInterpolation.cs`/`ISampling.cs`/`AlignModes.cs` 降采样与插值算法抽象,含 SamplingTests |
| M9-13 | 时序降采样 | ✅ | ✅ | ✅ | `AverageSampling.cs`,注释格式已修正 |
| M9-14 | 线性插值 | ✅ | ✅ | ✅ | `LinearInterpolation.cs`,含 LinearInterpolationTests |
| M9-15 | 数据管道 | ✅ | ✅ | ✅ | `Pipe.cs`/`PipeReader.cs`/`PipeWriter.cs` + `LimitedReader.cs`,单写单读、水位背压、零拷贝窗口,含 PipeTests/LimitedReaderTests/SessionPipeTests(规则见《数据管道Pipe》) |
| M9-16 | 向量存储 | ✅ | ✅ | ✅ | `IVectorStore.cs`/`IVectorStoreCollection`/`VectorRecord.cs` 向量集合与 Top-K 相似度检索接口(非泛型简化),含 VectorStoreTests(记录语义、JSON 往返、以测试内最小内存实现验证接口契约语义) |
## M10 网络通信
| 编码 | 功能 | 实现 | 测试 | 注释 | 说明 |
|------|------|:----:|:----:|:----:|------|
| M10-1 | TCP 服务端 | ✅ | ✅ | ✅ | `TcpServer.cs`,EchoNetServerTests |
| M10-2 | UDP 服务端 | ✅ | 🟡 | ✅ | `UdpServer.cs`/`UdpSession.cs`,含 SessionBaseTests;协议模式支持请求-响应等待(与 TCP 共用 `ResponseMatcher` + `IMatchQueue` 匹配路径,含 UdpMessageSessionTests 五类 RPC 用例);UDP 吞吐量集成测试环境敏感 |
| M10-3 | 网络客户端 | ✅ | ✅ | ✅ | `NetClient.cs` |
| M10-4 | 网络会话 | ✅ | ✅ | ✅ | `NetSession.cs` |
| M10-5 | 编解码管道 | ✅ | ✅ | ✅ | `SrmpCodec`/`LengthFieldCodec` 无状态编解码器(旧 StandardCodec 处理器族已退役) |
| M10-6 | JSON 编解码 | ⛔ | — | — | 原 `JsonCodec` 已随 Handlers 处理器体系整删;JSON 负载由应用层序列化(`Json`/`DefaultPacketEncoder`)承担,不再内置网络 JSON 编解码器 |
| M10-7 | WebSocket 编解码 | ✅ | ✅ | ✅ | `WebSocketCodec.cs`,含 WebSocketCodecTests + 集成测试 |
| M10-8 | HTTP 服务端 | ✅ | ✅ | ✅ | `HttpServer.cs`,集成测试;处理器契约为异步(`IHttpHandler.ProcessRequestAsync`,含 HttpAsyncHandlerTests) |
| M10-9 | HTTP 客户端 | ✅ | ✅ | ✅ | `TinyHttpClient.cs` 内网极简 HTTP 客户端(仅 HTTP/1.1 基础子集,不支持项显式抛异常);分块解码与 `HttpSession` 共用 `ChunkedDecoder`,含 TinyHttpClientTest |
| M10-10 | WebSocket | ✅ | ✅ | ✅ | `WebSocketClient`(Net)+ `WebSocket`/`WebSocketHandler`(Http),接收侧 RFC 6455 分片重组(超限 1009),含 WebSocketFragmentTests/Handshake/PingPong/Pull + 集成测试 |
| M10-11 | HTTP 路由 | ✅ | ✅ | ✅ | `HttpRouter.cs`,含 HttpServerTests 路由测试 |
| M10-12 | HTTP 中间件 | ✅ | ✅ | ✅ | CorsMiddleware/ErrorHandlerMiddleware 等,含 HttpMiddlewareTests |
| M10-13 | 分割粘包处理器 | ✅ | ✅ | ✅ | `SplitDataCodec.cs` 按分割字节处理粘包,含集成测试 |
| M10-14 | 消息匹配队列 | ✅ | ✅ | ✅ | `IMatchQueue.cs` 请求响应包配对队列,含 DefaultMatchQueueTests |
| M10-15 | DNS 解析处理器 | ✅ | ✅ | ✅ | `DnsHttpHandler.cs` 自定义 DNS 解析与多 IP 轮询 HttpClient 处理器,含 DnsHttpHandlerTests |
| M10-16 | APM 追踪处理器 | ✅ | ✅ | ✅ | `HttpTraceHandler.cs` HttpClient APM 链路追踪处理器,含 HttpTraceHandlerTests |
| M10-17 | Unix 域套接字 | ✅ | ✅ | ✅ | `NetUri` 支持 `unix://` 路径 + `TcpServer`/`TcpSession` AF_UNIX 分支(残留文件探测清理),UdsNetServerTests 6 用例(Echo/编解码/文件清理/双实例拒绝/HTTP over UDS);老 TFM 降级 |
| M10-18 | 消息帧泵 | ✅ | ✅ | ✅ | `MessagePump.cs` 帧泵(头部到齐即交付、小帧零拷贝快路径、大帧流式体)+ 无状态 `IMessageCodec` 单栈,含 MessagePumpTests |
## M11 Web 工具
| 编码 | 功能 | 实现 | 测试 | 注释 | 说明 |
|------|------|:----:|:----:|:----:|------|
| M11-1 | JWT 令牌 | ✅ | ✅ | ✅ | `JwtBuilder.cs` |
| M11-2 | 分布式令牌 | ✅ | ✅ | ✅ | `TokenProvider.cs` |
| M11-3 | HTTP 下载 | ✅ | ✅ | ✅ | `WebClientX.cs` |
| M11-4 | 插件辅助 | ✅ | ✅ | ✅ | `PluginHelper.cs`,含 PluginHelperTests |
| M11-5 | 对象存储客户端 | ✅ | ✅ | ✅ | `EasyClient.cs` + `IObjectStorage.cs` + `IObjectInfo.cs` 文件存储 HTTP 客户端;EasyClientTests 改为本地契约桩(HttpServer 复刻 EasyIO 线上契约),覆盖 Put/Get/GetUrl/Exists/Delete/Search,不依赖外部服务 |
| M11-6 | 令牌 HTTP 过滤器 | ✅ | ✅ | ✅ | `TokenHttpFilter.cs` HTTP 请求令牌注入与自动续期;含 TokenHttpFilterTests(自身请求识别/重入不等待/常规取令牌),续期待真实服务端到端 |
## M12 压缩归档
| 编码 | 功能 | 实现 | 测试 | 注释 | 说明 |
|------|------|:----:|:----:|:----:|------|
| M12-1 | Tar 归档 | ✅ | ✅ | ✅ | `TarFile.cs`,TarFileTests + TarEntryTests |
| M12-2 | 7Zip 压缩 | ✅ | ✅ | ✅ | `SevenZip.cs`,含 SevenZipTests |
## M13 RPC 通信
| 编码 | 功能 | 实现 | 测试 | 注释 | 说明 |
|------|------|:----:|:----:|:----:|------|
| M13-1 | HTTP API 客户端 | ✅ | ✅ | ✅ | `ApiHttpClient.cs`,Race 测试 |
| M13-2 | 负载均衡 | ✅ | ✅ | ✅ | `ILoadBalancer.cs`,三种策略均有测试 |
| M13-3 | 服务解析 | ✅ | ✅ | ✅ | `IServiceResolver.cs` |
| M13-4 | API 辅助 | ✅ | ✅ | ✅ | `ApiHelper.cs` |
---
## 测试体系
> 四个单元测试工程 + 一个移动端冒烟工程 + 一个基准工程,CI(`.github/workflows/test.yml`)按目标框架拆分为矩阵 job 并行执行,四个单元测试工程的全部 TFM 均有覆盖(全解决方案编译校验、Pack 校验与 AOT 冒烟各自独立并行 job)。移动端冒烟不走 `test.yml`,由独立 `.github/workflows/mobile.yml` 承担(Android API 36 模拟器 + iOS `macos-26` 模拟器,跑 `Samples/Mobile.Core` 的 21 个用例,路径触发包含 `NewLife.Core/**`、`NewLife.Core.SourceGenerator/**` 与 `Directory.Build.props`;仅 `NewLife.Core/**` 变更跑 Android JIT 快档,移动端样例、源生成器、全局构型或工作流自身变更跑 AOT 全量,iOS 按 Xcode 26.6 固定 workload 保持 Release,PR 同分支旧运行自动取消,NuGet 与 iOS 工具链走缓存)。单元测试只做确定性断言,绝对性能测量一律归 `Benchmark`。
> **跨平台覆盖**:test.yml 跨平台矩阵 —— linux-x64(Core 双 TFM + Compat + 源生成器)、linux-arm64(Core 双 TFM)为阻断门禁;osx-arm64 / osx-x64(macos-latest / macos-15-intel)、win-arm64、musl 容器(alpine x64/arm64 跑 net10.0)为观察期,全绿后逐项转阻断;linux-la64(QEMU 仿真 net10.0 全量)2026-10-17 起转观察期,仅人工 workflow_dispatch 触发、失败不阻塞(QEMU 下整套单测以小时计)。指令集矩阵 linux-riscv64 / linux-s390x 自 2026-10-18 起接入(QEMU 仿真 net10.0):push/PR 只跑 `XUnitTest.Buffers/Algorithms/Collections` smoke 子集,全量仅人工 workflow_dispatch,两者均 continue-on-error;s390x 为大端,用于验证字节序假设(ppc64le 因 QEMU 下运行时转换缺陷排除)。**本地 WSL 验证**:riscv64 与 s390x 全量均 3573 通过 / 5 跳过 / 0 失败(单线程、`NEWLIFE_TEST_QEMU=1`、无 TOTAL 自动重试)。AOT 冒烟矩阵覆盖 win-x64 / linux-x64 / linux-arm64(阻断)与 win-arm64、osx 双架构、musl、win-x86、linux-arm(观察期容错),LA64 与 riscv64 的 JIT 冒烟及 NativeAOT 发布探索同为人工触发的观察期项;全部 push/PR + 人工手动触发,无夜间任务,详见[《AOT兼容性分析》§7](/NewLife/X/Blob/dev/Doc/AOT兼容性分析.md)。
| 工程 | 目标框架 | 说明 |
|------|------|------|
| `XUnitTest.Core` | net8.0;net9.0;net10.0;net8.0-windows;net10.0-windows | 全量套件(含 Net/Http/Integration 等重区;Remoting 区 5 个联测文件,见下),输出 `Bin\UnitTest\<tfm>`;网络集合拆为 `Net.A`~`Net.D` 可并行;`xunit.runner.json` 限每宿主 10 线程 |
| `XUnitTest.Compat` | net462;net8.0 | 跨版本兼容验证;net462 需 `appDomain: denied`(独立 AppDomain 无法卸载,进程跑完不退出) |
| `XUnitTest.Net6` | net6.0;net6.0-windows | 复用 `XUnitTest.Core` 单元区源码,补齐库最低现代 TFM 的覆盖,输出 `Bin\UnitTest6\<tfm>` |
| `XUnitTest.SourceGenerator` | net10.0 | 源生成器生成物断言(ServiceRegistrar/JsonSerializable/ConfigModel/HttpControllerDispatch 四个生成器 + 生成器测试宿主),输出 `Bin\UnitTestSG` |
| `Benchmark` | net10.0 | 性能基准(含 `NetLoadTest` 压测),不与单元测试混跑 |
> **本地全量并行跑测**:命令行默认按 TFM 顺序执行(墙钟为各宿主之和),用 [run-tests.ps1](/NewLife/X/Blob/dev/Doc/../Tools/Scripts/run-tests.ps1) 一条命令并行跑完全部 10 个宿主(宿主名与 CI 矩阵一致):先逐工程构建一次,再多进程 `dotnet test --no-build` 并发执行(本机 20 逻辑核实测:并行总墙钟约 33~35s,顺序为 ~139s),带单宿主超时兜底(超时按 PID 递归终止进程树)与 trx 汇总表,trx 与日志输出到 `TestResults\<时间戳>\`。参数:`-Configuration`(默认 Release)、`-Only`(按宿主名正则过滤)、`-SkipBuild`、`-TimeoutSec`、`-ThrottleLimit`、`-List`。UDP/定时器/外部网络类环境敏感用例在满载下仍可能偶发(顺序执行同样出现),重跑或单跑可甄别。VS 2026 侧另在解决方案根目录放 [`.runsettings`](/NewLife/X/Blob/dev/Doc/../.runsettings)(`MaxCpuCount=0`,进程级并行;默认值 1 即容器串行),经「自动检测 runsettings」(Tools > Options > Test,默认开启)应用于所有 VS 测试运行,10 个宿主并行;Test Explorer 工具栏的设置菜单另有「并行执行测试」开关可单独启停。
> 网络用例约定:**不用 `Port = 0` 起步的双协议服务器**(TCP/UDP 的系统保留段相互独立,跨协议继承的端口会 `WSAEACCES`)——只跑 TCP 的用例显式 `ProtocolType = NetType.Tcp`,真双协议用例用 [TestPort.cs](/NewLife/X/Blob/dev/Doc/../XUnitTest.Core/Net/TestPort.cs) `PickDual` 取显式端口(按“工程目录 + TFM”给 10 个宿主各留独立候选段);跨进程共享的临时路径必须按进程/宿主隔离。
> **输出目录共用提示**:库的 `Bin\<tfm>` 与测试的 `Bin\UnitTest\<tfm>`(另有 `Bin\UnitTest6`、`Bin\UnitTestCompat`、`Bin\UnitTestSG`)都**不区分 Debug/Release**,Release 构建会覆盖同名 Debug 产物。一旦发生,Debug 测试会加载到不含 DEBUG 析构兜底的库,`OwnerPacketTests.Finalizer_ShouldReleaseReference` 随即失败(该用例已加前提校验,会直接报出产物错配与库加载路径)。按配置隔离输出目录的根治暂缓,遇到该报错用 Debug 重新生成库与测试工程即可。
### XUnitTest.Net6(net6.0 覆盖)
| 项 | 说明 |
|------|------|
| 目标框架 | `net6.0`、`net6.0-windows`(`WINDOWS` 与主工程同义),输出 `Bin\UnitTest6\<tfm>` |
| 用例来源 | 直接 `Compile Include` [XUnitTest.Core](/NewLife/X/Blob/dev/Doc/../XUnitTest.Core) 的单元区源码:Algorithms/Buffers/Caching/Collections/Common/Compatibility/Compression/Configuration/Data/Event/Exceptions/Extension/IO/Log/Messaging/Model/Reflection/Security/Serialization/Threading/Web/Xml + `GeoArea.cs`/`PropertyInfo.cs`;排除 Integration/Net/Http/Remoting/Applications/Expressions/Json/TestEntity/Yun |
| 用例规模 | net6.0 约 2450 项、net6.0-windows 约 2460 项(单宿主墙钟约 6~8 s,双宿主并发约 11~13 s) |
| 包组合 | `Microsoft.NET.Test.Sdk 17.12.0`(唯一仍带 netcoreapp3.1 testhost 的版本线)+ `xunit 2.9.3` + `xunit.runner.visualstudio 2.8.2` + `NewLife.UnitTest`;3.x 适配器只提供 net472/net8.0,无法用于 net6.0 |
| 差异处理 | `Compression/TarFileTests.cs` 使用 `System.Formats.Tar`(net7.0+)故排除;`Serialization/PropertyNamingTests` 的 `.Order()` 与 `Serialization/ExtendableConverterTests` 的 `JsonSerializerOptions.Default` 分别改为 `OrderBy`/`#if NET9_0_OR_GREATER`;net6.0-windows 的 WMI 用例显式引用 `System.Management 6.0.2`(库传递的 9.0.5 仅有 netstandard2.0 占位实现) |
| 程序集可见性 | 单元区用例大量使用库内 `internal` 成员,[Setting.cs](/NewLife/X/Blob/dev/Doc/../NewLife.Core/Setting.cs) 增加 `InternalsVisibleTo("XUnitTest.Net6")`(与本仓既有做法一致) |
| 运行方式 | `dotnet test XUnitTest.Net6\XUnitTest.Net6.csproj -f net6.0`(IDE 中按目标框架分别运行;两个框架可并行,工作目录各自独立) |
### Mobile(Android/iOS)
| 项 | 说明 |
|------|------|
| 工程 | [Samples/Mobile.Core](/NewLife/X/Blob/dev/Doc/../Samples/Mobile.Core) / [Mobile.Console](/NewLife/X/Blob/dev/Doc/../Samples/Mobile.Console) / [Mobile.Android](/NewLife/X/Blob/dev/Doc/../Samples/Mobile.Android) / [Mobile.iOS](/NewLife/X/Blob/dev/Doc/../Samples/Mobile.iOS):系统信息 + 21 个离线冒烟用例 + XTrace 日志;输出统一到 `Bin\Mobile.*` |
| 覆盖 | 系统信息(`MachineInfo`、Android 原生信息)、日志、配置、缓存、定时器、JSON/二进制序列化、TCP/HTTP/WebSocket 回环、安全加密、Tar 归档、对象容器、动态能力降级、BCL 原生 TCP 基线 |
| 运行 | 桌面 `dotnet run --project Samples/Mobile.Console`(`--smoke`/`--all`);Android `run-android.ps1`(`-Smoke`);iOS `run-ios.sh`(macOS) |
| 打包 | `Samples/Mobile.Android/pack-android.ps1 -Mode Jit|Aot|NativeAot`,APK 输出到 `Bin\Mobile.Android\apk` |
| CI | [.github/workflows/mobile.yml](/NewLife/X/Blob/dev/Doc/../.github/workflows/mobile.yml):Android API 36 模拟器 + iOS `macos-26` 模拟器,push/pull_request 路径触发 + 人工触发;按变更范围选择 Android JIT 快档或 AOT 全量 |
| 严格度 | Android/iOS Release 启用 `TrimMode=full`;iOS 走 AOT |
| 实测 | 桌面 21/21;Android 10 / arm64 真机 JIT/AOT 系统信息 + 21/21(Stardust 构建需 AOT,JIT 冷启动在 Android 10 会崩溃);iOS 源码在 Windows 编译通过,模拟器运行待 macOS CI |
| 注意事项 | Android 需 `INTERNET` + `usesCleartextTraffic`,应用图标为四叶草;iOS 需 `NSAllowsLocalNetworking` + `XSAppIconAssets`;`MachineInfo` Android/iOS 分支均已补齐,Android 宿主补充市场名称/设备名称/处理器友好名,iOS 宿主补充设备名称/稳定标识/电池,温度按平台能力由宿主补充;Android 10+ 无法读取 IMEI/MEID,UUID 使用 `android_id` |
### 排除编译的测试
| 测试 | 编码 | 原因 |
|------|------|------|
| `Applications/**` | — | 应用层测试,依赖外部 |
| `Json/**` | — | `JsonConfigTest.cs` 控制台式用例(Console 输出、无断言),csproj 显式排除 |
| `TestEntity/**` | — | XCode 实体样例(非用例),csproj 显式排除 |
| `Remoting/**` | — | Remoting 拆分为独立仓库后,本仓仅保留核心库 ApiHttpClient/ApiHelper 联测用例(`ApiHttpClientTests`/`ApiHttpClientRaceTests`/`ApiHttpClientUnitTests`/`ConfigServiceResolverTests`/`LoadBalancerTests` 五个文件,经 NuGet 引用 NewLife.Remoting 的 ApiServer 联测);`ApiTest`/`ApiHelperTest`/`ApiDownTests` 属外部组件用例,已迁至 NewLife.Remoting 仓库维护 |
## 待修复项
> 本清单是**消费型工单**,只放尚未修复的问题:每条写明「是什么问题 / 有什么危害 / 怎么修改 / 修改后的遗憾」,编号用 `FIX-`/`IMP-` 前缀并标严重程度(必改 / 建议 / 可选)。
> **修完即删**——不在本清单保留修复过程或"已修"记录(历史见提交信息与代码注释),也不要并入上方功能点表。
> **准入线**:只登记三类问题——①真实场景能触发、后果为算错/丢数据/挂死/泄漏的正确性与资源问题;②会破坏生态二进制兼容或协议互操作的问题;③持续误导(文档与代码相反、已决事项被反复翻案)。每条必须能说出触发路径(谁、什么场景、怎么发生);纯风格命名、无后果的理论竞态、无实测的微优化**不登记**。**无必改项是有效结论**,不为凑数登记长尾。
> 已收口项(已知不处理、不再重复登记)汇总于[《架构设计》§3 关键设计决策](/NewLife/X/Blob/dev/Doc/架构设计.md#3-关键设计决策)——扫描网络栈前先读该节,避免重复报告。
> 埋点体系的已收口项见[《链路追踪ITracer》收口记录](/NewLife/X/Blob/dev/Doc/链路追踪ITracer.md#收口记录)——扫描埋点体系前先读该节,避免重复报告。
> 令牌与 WebSocket 安全切片的收口记录见[《架构设计》§6 安全切片收口记录](/NewLife/X/Blob/dev/Doc/架构设计.md#6-安全切片收口记录令牌与-websocket)——扫描令牌/WebSocket 前先读该节,避免重复报告。
> 本地化词表的收口记录见[《多语言本地化》§7 收口记录](/NewLife/X/Blob/dev/Doc/多语言本地化.md#7-收口记录)——审计多语言词表前先读该节,避免重复报告。
> 跨 TFM 兼容切片的已收口项见[《架构设计》§7 收口记录](/NewLife/X/Blob/dev/Doc/架构设计.md#7-收口记录跨-tfm-兼容切片)——扫描兼容面/维护抑制文件前先读该节,避免重复报告。
> 覆盖率盲区的已收口项见[《架构设计》§8 收口记录](/NewLife/X/Blob/dev/Doc/架构设计.md#8-收口记录覆盖率盲区)——做覆盖率分析或补测规划前先读该节,避免重复清点。
| 编号 | 严重程度 | 是什么问题 | 怎么修改 | 修改后的遗憾 |
|------|------|------|------|------|
> 当前无待修复项。已完成项按规则删除,历史见提交信息与代码注释。
> AOT 支持专项已收口(分析器与发布期 ILC 告警均归零,冒烟 31/31),支持范围、边界与收口记录见[《AOT兼容性分析》](/NewLife/X/Blob/dev/Doc/AOT兼容性分析.md);关闭/重开交叉窗口专项收窄为“会话对象一次性”契约(关闭后禁止重新打开,重连请新建对象),交叉窗口从根上消除。
|