Skip to content

build: target frameworks in the plural, and say so on the front page - #18

Merged
Reefact merged 1 commit into
mainfrom
claude/prepare-multi-targeting
Aug 8, 2026
Merged

build: target frameworks in the plural, and say so on the front page#18
Reefact merged 1 commit into
mainfrom
claude/prepare-multi-targeting

Conversation

@Reefact

@Reefact Reefact commented Aug 8, 2026

Copy link
Copy Markdown
Owner

Summary

Prepares the repository to serve a second .NET without opening a second major line. Nothing changes today: same output paths, same package layout, same supported framework.

Type of change

  • Bug fix
  • New feature
  • Breaking change to the public API
  • Refactoring
  • Analyzer / diagnostic change
  • Tests
  • Documentation
  • Build / CI / tooling

Changes

  • Directory.Build.props: TargetFrameworkTargetFrameworks, value unchanged (net10.0). With a single value the plural builds exactly what the singular built — verified below — so the cost is nil and adding ;net11.0 later is one character instead of a migration.
  • AspNetCore.EnumMemberNameBinding.Analyzers.csproj: converted too, and this one is not cosmetic. The two spellings cannot coexist: TargetFrameworks wins wherever both are set, so leaving the analyzer on the singular would have silently retargeted it from netstandard2.0 to net10.0 — the one target it must keep, since that is what lets it load in every host. Confirmed still building to netstandard2.0.
  • README.md and docs/README.fr.md: the compatibility sentence becomes a table, plus a line stating the rule the numbering follows — the package version describes this library's public surface, so a new .NET adds a row rather than moving the major, and "take the latest version" stays the whole instruction because NuGet resolves the target framework. Both languages, since a_translation_keeps_the_same_structure compares table rows across a page and its translation.

Nothing else needed converting: tests/PackageSmokeTest/Directory.Build.props is deliberately empty, so the smoke-test fixtures inherit none of this and keep their own singular TargetFramework.

Testing

  • dotnet build -c Release — clean, warnings are errors here. Output paths confirmed unchanged: net10.0 for the packages, netstandard2.0 for the analyzer.
  • dotnet test -c Release — 394 passed, 0 failed (292 / 61 / 41), including the translation-structure suite that guards the new table.
  • tests/PackageSmokeTest/run.sh — run because packaging is exactly what this touches: it starts from dotnet pack and ends at an HTTP response, so it is what proves the plural did not disturb the .nupkg a consumer restores. Passes.

Public API

  • No change to the public surface
  • The surface changed and the baseline was updated in the same commit

Documentation

  • README / docs/ updated
  • The French counterpart was updated to match
  • CHANGELOG.md and docs/CHANGELOG.fr.md both updated
  • No documentation change required

No changelog entry: nothing shipped changes behaviour or surface. Say the word if you would rather the compatibility statement be recorded there too.

Related issues

Groundwork for the .NET 11 move: Microsoft.AspNetCore.OpenApi 11.0.0-preview already depends on Microsoft.OpenApi 3.x, so the day this repository adds net11.0 is also the day the ignore entry from #17 comes out.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VZGwf9Cqea1f6sv2sEreQK


Generated by Claude Code

Two preparations for the day a second .NET has to be served, neither of
which changes anything today.

TargetFrameworks with a single value builds exactly what TargetFramework
built: same net10.0 output path, same package layout, and the smoke test
still consumes the .nupkg without noticing. What it buys is that adding a
target becomes one character rather than a migration, at a moment when the
rest of that change will already be the interesting part. The analyzer
project follows because the two spellings cannot coexist — the plural wins
wherever both are set, so a project overriding the singular would have been
quietly retargeted off netstandard2.0, which is the whole reason an
analyzer picks that target.

The front page states compatibility as a table rather than a sentence,
because a sentence has room for one answer and the answer is about to
become two. It also writes down the rule the numbering follows, since that
is the question such a table invites: the package version describes this
library's own public surface, so a new .NET release adds a row rather than
moving the major, and "take the latest version" remains the entire
instruction — NuGet resolves the target framework for the consumer. In both
languages, since a page's structure is compared against its translation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VZGwf9Cqea1f6sv2sEreQK
@Reefact
Reefact merged commit 9f95983 into main Aug 8, 2026
7 checks passed
@Reefact
Reefact deleted the claude/prepare-multi-targeting branch August 8, 2026 09:52
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.

2 participants