Thanks to visit codestin.com
Credit goes to github.com

Skip to content

build: multi-target net8.0 + net10.0, lock API surface — 1.0.0 prep#9

Merged
diomonogatari merged 3 commits into
mainfrom
release/1.0.0-prep
Jun 5, 2026
Merged

build: multi-target net8.0 + net10.0, lock API surface — 1.0.0 prep#9
diomonogatari merged 3 commits into
mainfrom
release/1.0.0-prep

Conversation

@diomonogatari

@diomonogatari diomonogatari commented Jun 5, 2026

Copy link
Copy Markdown
Owner

Summary

Prep for the first stable 1.0.0 release. This addresses the net10-only lock and the pre-1.0.0 checklist. It does not release anything — publishing still happens via a tagged GitHub Release, which is a separate, deliberate step.

What's in here

Multi-target net8.0 (LTS) + net10.0

The library was net10.0-only, which excluded most consumers (net8 LTS is the bulk of production; net9 is STS). Now multi-targets net8.0;net10.0:

  • Directory.Build.props: TargetFrameworkTargetFrameworks net8.0;net10.0 (library + tests; tests run on both runtimes).
  • Benchmarks pinned to net10.0 (dev tool).
  • One net10-only test API (System.Linq.AsyncEnumerable.Empty) swapped for the existing TFM-agnostic helper — the library itself had zero net10-only APIs.
  • CI + publish install both 8.0.x and 10.0.x.
  • 767 tests pass on net8.0 and net10.0; the package ships lib/net8.0 + lib/net10.0.

Lock the API surface — EnablePackageValidation

Pack now validates the net8.0/net10.0 surfaces are compatible, and (once PackageValidationBaselineVersion is set after 1.0.0 ships) will flag accidental breaking changes vs the baseline. Lower-maintenance and multi-target-aware vs hand-maintained PublicAPI.txt files.

Reconcile the changelog + version

No 1.0.0 was ever published (latest on NuGet is 0.3.0); the [1.0.0] - 2026-02-12 entry was aspirational. Consolidated everything since 0.3.0 into one honest, dated 1.0.0 entry (target frameworks/packaging + this cycle's extensibility/filters/DX + the folded-in modernization). README notes net8/net10 support.

The library was net10.0-only, which excluded the large base of consumers on
.NET 8 LTS (and .NET 9). Multi-target net8.0;net10.0 so the package is broadly
installable; .NET 9 apps resolve the net8.0 assembly automatically.

- Directory.Build.props: TargetFramework -> TargetFrameworks net8.0;net10.0
  (applies to the library and test project; tests now run on both runtimes).
- Benchmarks stay net10.0-only (dev tool).
- Replace the one net10-only test API (System.Linq.AsyncEnumerable.Empty) with
  the existing TFM-agnostic CreateDiffsAsync(0, 0) helper.
- CI/publish: install both 8.0.x and 10.0.x so both targets build and test.

All 767 tests pass on net8.0 and net10.0.
Turn on EnablePackageValidation so pack validates that the net8.0 and net10.0
targets expose a compatible API surface, and (once the baseline is set after
1.0.0 ships) flags accidental breaking changes against the prior release.
No 1.0.0 was ever published (latest on NuGet is 0.3.0) and the [1.0.0] entry
was aspirational/stale. Consolidate everything since 0.3.0 into a single dated
1.0.0 entry: target frameworks + packaging, the extensibility/filters/DX work
from this cycle, and the folded-in modernization. Note net8.0/net10.0 support
in the README.
@diomonogatari diomonogatari merged commit 2803c1d into main Jun 5, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant