Skip to content

Building and Tasks

Yasunobu edited this page Jun 26, 2026 · 1 revision

Building & Tasks

All tasks live in the justfile. Run just (or just default) to list them. The solution file is KeepPressing.slnx.

Recipes

Recipe What it does
just / just default List all recipes (just --list)
just build mise x -- dotnet build KeepPressing.slnx — full Debug build
just test mise x -- dotnet test KeepPressing.slnx — runs the test projects
just clean Removes bin/ and obj/ for all four projects
just publish [arch=x64] Self-contained Release publish to dist/KeepPressing (then trims it)

just publish

just publish            # x64 → dist/KeepPressing
just publish arch=arm64 # arm64 → dist/KeepPressing-arm64

It runs dotnet publish KeepPressing -c Release -r win-<arch> and, after publishing, the TrimPortableDistribution MSBuild target prunes the output (non-en/ja MUI, .pdb, unused native DLLs). See Portable Distribution.

The Git Bash shell, and the -- caveat

The justfile sets:

set windows-shell := ["bash", "-uc"]

so recipes run under Git Bash, not PowerShell or cmd. This is deliberate: PowerShell consumes the -- argument separator that mise x -- dotnet … relies on, which would break the recipes. Keep new recipes POSIX-sh compatible.

Code-quality regime (this is the build's quality gate)

Shared settings live in Directory.Build.props and apply to every project:

<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<AnalysisLevel>latest-Recommended</AnalysisLevel>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<!-- Debug only: warnings become errors -->
<TreatWarningsAsErrors Condition="'$(Configuration)' == 'Debug'">true</TreatWarningsAsErrors>

What this means in practice:

  • just build is a Debug build, and warnings are errors. Any analyzer or code-style warning fails the build — and the same gate runs in CI (CI/CD).
  • Release/publish does not treat warnings as errors, because the WinAppSDK trimming pass emits IL2104 warnings that are impractical to suppress.
  • Generated code is excluded from analysis (*.g.cs, *.Designer.cs, obj/**) via the root .editorconfig.
  • Core enforces ConfigureAwait(false): KeepPressing.Core/.editorconfig sets dotnet_diagnostic.CA2007.severity = error. The reason is load-bearing — see Threading & ConfigureAwait.

Projects

Project TFM Role
KeepPressing net10.0-windows10.0.26100.0 WinUI 3 app (UI, Interop, MVVM, DI)
KeepPressing.Core net10.0 Pure domain logic, zero Win32
KeepPressing.Core.Tests net10.0 Core unit tests
KeepPressing.App.Tests net10.0-windows… ViewModel / presentation tests

Next: Architecture · Testing Strategy · Portable Distribution

Clone this wiki locally