Built from main at 1d902a0 on 2026-11-14

.NET

C# and F#, recognised by .cs and .fs sources and MSBuild project and solution files. Project files and Directory.Build.props count as CI configuration when CI builds.

tests-run

A test project referencing Microsoft.NET.Test.Sdk (or MSTest.Sdk) with [Fact], [Test] or [TestMethod] tests, run by dotnet test.

fuzz-testing

SharpFuzz targets (.cs or .fs files that call Fuzzer.Run, Fuzzer.OutOfProcess.Run or Fuzzer.LibFuzzer.Run), run by a CI step libfuzzer-dotnet, or afl-fuzz whose target (the words after --) is dotnet or a .dll (sharpfuzz only instruments an assembly, so it is not a run). FsCheck tests alone warn: they are property-based tests, not fuzz targets.

coverage

coverlet (dotnet test --collect "XPlat Code Coverage", CollectCoverage=true on the command line or in the MSBuild settings dotnet test builds with, a .runsettings file it is given that adds the collector, or the coverlet console tool), dotnet-coverage collect or dotnet test --coverage.

platform-matrix

The toolchains are .NET SDK versions.

compiler-warnings

C# projects set AnalysisMode (or AnalysisLevel) to Recommended or All, EnforceCodeStyleInBuild and Nullable enable in a project file or Directory.Build.props; F#-only projects turn on more compiler warnings (<WarnOn>, --warnon:).

warnings-as-errors

TreatWarningsAsErrors or -warnaserror.

mutation-testing

Stryker.NET (dotnet stryker; settings in stryker-config.json). dotnet stryker --since (or --since:<branch>) counts as running on the changes only.

code-formatting

dotnet format --verify-no-changes (style in .editorconfig) and csharpier check (or --check) for C#; fantomas --check for F#; run directly or as dotnet local tools. They have a default style, so CI enforcement alone passes.

function-limits

lizard runs in CI with a length limit. lizard does not measure F#, and no known tool limits the length of F# functions, so F# is skipped.

static-analysis

For C#, an analyzer package beyond the SDK's own (Roslynator, SonarAnalyzer, StyleCop.Analyzers or Meziantou.Analyzer) referenced by a project or Directory.*.props, which runs when CI builds (dotnet build, test, pack, publish, msbuild); for F#, FSharpLint (dotnet fsharplint lint).

security-scanning

The analyzers' Security category (AnalysisModeSecurity, or category-Security severity warning or error in .editorconfig or .globalconfig), or Security Code Scan, when CI builds. In CI, where the tool runs (a setting alone, which nothing CI runs reads, does not count); CodeQL, GitLab SAST or semgrep count too.

dependency-management

NuGet PackageReferences are locked by committed packages.lock.json files.

dependency-audit

NuGetAuditMode all in the MSBuild files, when CI restores or builds (restoring then audits transitive packages too), or dotnet list package --vulnerable.

license

PackageLicenseExpression.

committed-artifacts

obj/, *.dll, *.pdb and *.nupkg.

vcs-ignore

bin/ or obj/.

hardening is not judged for .NET yet.