funfair-tech/funfair-server-code-analysis

GitHub: funfair-tech/funfair-server-code-analysis

为 FunFair C# 服务器项目提供定制化静态代码分析规则,确保编码一致性与安全。

Stars: 1 | Forks: 1

# funfair-server-code-analysis 静态代码分析 适用于 FunFair 服务器 dotnet 项目。 ## 构建状态 | 分支 | 状态 | |---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | main | [![构建: 预发布](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/696c44a17f224643.svg)](https://github.com/funfair-tech/funfair-server-code-analysis/actions/workflows/build-and-publish-pre-release.yml) | | release | [![构建: 发布](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/0837a8e3de224644.svg)](https://github.com/funfair-tech/funfair-server-code-analysis/actions/workflows/build-and-publish-release.yml) | ## 检查项 | 代码 | 含义 | |---------|------------------------------------------------------------------------------------------------------------------------------------------------| | FFS0001 | 避免使用 ``DateTime.Now`` - 请使用 ``IDateTimeSource.UtcNow()`` | | FFS0002 | 避免使用 ``DateTime.UtcNow`` - 请使用 ``IDateTimeSource.UtcNow()`` | | FFS0003 | 避免使用 ``DateTime.Today`` - 请使用 ``IDateTimeSource.UtcNow().Date`` | | FFS0004 | 避免使用 ``DateTimeOffset.Now`` - 请使用 ``IDateTimeSource.UtcNow()`` | | FFS0005 | 避免使用 ``DateTimeOffset.UtcNow`` - 请使用 ``IDateTimeSource.UtcNow()`` | | FFS0006 | 避免使用任意 SQL 进行更新 | | FFS0007 | 避免使用任意 SQL 进行查询 | | FFS0008 | 不要禁用警告 | | FFS0009 | 不要在不指定消息的情况下使用 ``Assert.True`` | | FFS0010 | 不要在不指定消息的情况下使用 ``Assert.False`` | | FFS0011 | 将结构体设为 ``readonly`` | | FFS0012 | 类应为 ``static``、``sealed`` 或 ``abstract`` | | FFS0013 | 测试类应为 ``sealed`` 或 ``abstract`` 并派生自 ``TestBase`` | | FFS0014 | 不要在不指定 ``JsonOptions`` 的情况下使用 ``JsonSerialiser`` | | FFS0015 | 不要在不指定 ``JsonOptions`` 的情况下使用 ``JsonDeserialiser`` | | FFS0016 | 向 ``ArgumentExceptions`` 传递参数名称 | | FFS0017 | 在 catch 块中抛出的异常时传递内部异常 | | FFS0018 | 不要在不指定调用次数的情况下使用 NSubstitute 的 ``Received()`` | | FFS0019 | ``ILogger`` 参数应命名为 ``logger`` | | FFS0020 | 参数应按指定顺序排列 | | FFS0021 | 不要使用 NSubstitute 的 ``Received(0)`` - 请改用 ``DidNotReceive()`` instead | | FFS0022 | 不要在代码中配置可空性 - 应为项目级别。 | | FFS0023 | 基类中的 ``ILogger`` 参数应为 ``ILogger`` 而非 ``ILogger`` | | FFS0024 | 叶子类中的 ``ILogger`` 参数应为 ``ILogger`` 而非 ``ILogger`` | | FFS0025 | 泛型类型不匹配 | | FFS0026 | 不要从 Connection 读取 IPAddress - 请使用抽象 | | FFS0027 | ``SuppressMessage`` 必须指定理由 | | FFS0028 | 记录应为 ``sealed`` | | FFS0029 | 从 ``MockBase`` 派生的类应为 ``internal`` | | FFS0030 | 从 ``MockBase`` 派生的类应为 ``sealed`` | | FFS0031 | 避免使用 ``System.Collections.Concurrent.ConcurrentDictionary<,>`` - 请使用 ``NonBlocking.ConcurrentDictionary<,>`` | | FFS0032 | 避免使用 ``NonBlocing.ConcurrentDictionary<,>.AddOrUpdate`` - 请使用 ``FunFair.Common.Extensions.ConcurrentDictionaryExtensions.AddOrUpdate`` | | FFS0033 | 避免使用 ``NonBlocing.ConcurrentDictionary<,>.GetOrAdd`` - 请使用 ``FunFair.Common.Extensions.ConcurrentDictionaryExtensions.GetOrAdd`` | | FFS0034 | 不要使用 ``Microsoft.Extensions.Configuration.ConfigurationBuilder.AddJsonFile`` 并将 reload 设置为 true | | FFS0035 | 检查测试类是否定义了可变字段 | | FFS0036 | 检查测试类是否定义了可变属性 | | FFS0037 | 检查是否使用了 ``Guid.Parse``,应使用 ``new Guid`` 或 ``Guid.TryParse`` 替代 | | FFS0038 | 记录应具有 ``DebuggerDisplay`` 属性。 | | FFS0039 | 每个文件只应定义一个类型名称。注意 ``class T`` 和 ``class T`` 被视为一个类型,因为它们共享相同的名称。 | | FFS0040 | 类型应位于与类型同名的文件中。 | | FFS0041 | 不要在测试程序集中使用 System.Console。 | | FFS0042 | 不要在 ``SuppressMessage`` 的理由中包含 TODO。 | | FFS0043 | 不要使用 ``StringComparer.InvariantCulture``,请改用 ``StringComparer.Ordinal``。 | | FFS0044 | 不要使用 ``StringComparer.InvariantCultureIgnoreCase``,请改用 ``StringComparer.OrdinalIgnoreCase``。 | | FFS0045 | 不要使用 ``StringCompaison.InvariantCulture``,请改用 ``StringCompaison.Ordinal``。 | | FFS0046 | 不要使用 ``StringCompaision.InvariantCultureIgnoreCase``,请改用 ``StringCompaision.OrdinalIgnoreCase``。 | | FFS0047 | 不要使用 ``StringCompaision.CurrentCulture``,请改用 ``StringCompaision.Ordinal``。 | | FFS0048 | 不要使用 ``StringCompaision.CurrentCultureIgnoreCase``,请改用 ``StringCompaision.OrdinalIgnoreCase``。 | ## 更新日志 查看 [更新日志](CHANGELOG.md)
标签:CI, DateTime.Now, DateTime.Today, DateTime.UtcNow, dotnet, FunFair, IDateTimeSource, 代码分析规则, 代码审查, 代码治理, 代码规范, 多人体追踪, 安全专业人员, 开源框架, 技术债务, 持续集成, 服务器端开发, 服务端, 规则检查, 重构, 错误基检测, 静态代码分析