tools/README.md
Maintenance scripts for the ReactiveUI repository.
Regenerates the PublicAPI baseline files consumed by
Microsoft.CodeAnalysis.PublicApiAnalyzers (RS0016, RS0017, RS0037).
Each shipped library tracks its public surface per target framework in:
src/<Project>/PublicAPI/<tfm>/PublicAPI.Shipped.txt
src/<Project>/PublicAPI/<tfm>/PublicAPI.Unshipped.txt
When you add, remove, or change public API, those files must be updated or the build
fails with RS0016 (symbol not in baseline) / RS0017 (baseline entry not found) /
RS0037 (missing #nullable enable). These scripts do that for you.
Only projects with the MSBuild property TrackPublicApi=true are processed. The
tests/ and benchmarks/ trees opt out centrally in src/Directory.Build.props,
so they are never touched.
Linux / macOS:
tools/generate-publicapi.sh # all tracked libraries, all buildable TFMs
tools/generate-publicapi.sh Async # only projects whose path contains 'Async'
tools/generate-publicapi.sh ReactiveUI.Wpf
Windows (PowerShell):
./tools/generate-publicapi.ps1 # all tracked libraries
./tools/generate-publicapi.ps1 -Filter Async # path filter
The optional argument is a case-sensitive substring matched against each project's path, so you can scope a run to a single library while iterating.
PublicAPI/<tfm>/PublicAPI.Shipped.txt and PublicAPI.Unshipped.txt
to just #nullable enable, so the analyzer reports the entire current surface.dotnet format analyzers <proj> -f <tfm> --diagnostics RS0016 RS0017 RS0037 --severity info, which fills PublicAPI.Unshipped.txt with the current public API.PublicAPI.Shipped.txt (ordinally sorted, deduped) and
resets PublicAPI.Unshipped.txt back to the bare header. This repo keeps the full
surface in Shipped with Unshipped empty, so a later API change shows up as
new Unshipped lines.generate-publicapi.ps1. This repo's Windows/Apple legs are generated on the
dockur Windows guest (~/dockur-windows); the repo is shared in-guest as
\\host.lan\Data\rxui\reactiveui.net8.0+, Android, and the Windows-desktop TFMs cross-platform
(the script sets EnableWindowsTargeting=true). It cannot produce Apple
(-ios / -maccatalyst / -tvos / -macos) baselines.MinVerVersionOverride (default 255.255.255-dev) so versioning
does not depend on git history; override it by exporting/setting the variable first.protected on a public type) API.Review the resulting PublicAPI.Unshipped.txt diff before committing — it is the
human-auditable record of your public API change.