What each project's Makefile hooks run. Versions are the ones pinned in the repository
(lockfile, Containerfile, or CI).
Purpose
Tool
Unit tests
xUnit v3 (xunit.v3 4.0.2) on Microsoft.Testing.Platform (dotnet test --solution)
Lint
dotnet build with TreatWarningsAsErrors, the .NET analyzers (AnalysisLevel latest, Recommended), and EnforceCodeStyleInBuild; then dotnet format --verify-no-changes
Format
dotnet format (ships with the SDK; style in src/.editorconfig)
Dependencies
NuGet with committed packages.lock.json files, restored with --locked-mode; SDK selected by src/global.json (10.0.100, rollForward: latestFeature)
Build output (BIN_DIR)
bin/: a framework-dependent, single-file apphost (dp-hello, dp-hello.exe on Windows)
Install
Copies the apphost to $(BINDIR); it needs the .NET 10 runtime (standard location or DOTNET_ROOT)
A project is implemented once it is listed in IMPLEMENTED in the repository's root
Makefile. CI then builds, lints, and tests it in the container and natively on Linux,
macOS, and Windows.
Output is written as UTF-8 bytes to the raw standard streams
(Console.OpenStandardOutput()), never through Console.Out, so there is no console code
page or newline translation.
RuntimeIdentifiers lists all six desktop runtime identifiers, so packages.lock.json is
the same on every OS and --locked-mode restores work everywhere.
On POSIX, argument bytes that are not valid UTF-8 reach the program as U+FFFD (documented in
the HLD; outside the specification's UTF-8 assumption).