Skip to content

VONK-10067: Add net10.0 target framework and convert to slnx - #703

Merged
mmsmits merged 3 commits into
developfrom
feature/VONK-10067-migrate-to-net-10
Oct 7, 2026
Merged

mmsmits merged 3 commits into
developfrom
feature/VONK-10067-migrate-to-net-10

Conversation

@eugene-blokhin-firely

@eugene-blokhin-firely eugene-blokhin-firely commented Oct 7, 2026 •

Copy link
Copy Markdown

Implements the firely-validator-api part of VONK-10067, the same way as the SDK (firely-net-sdk#3612, released in 6.6.0) and Firely.Fhir.Packages (#223, released in 6.2.0).

What changes

  • Target frameworks. Libraries target net8.0;net10.0;netstandard2.1. This only adds a target, so it isn't breaking: .NET 8/9 consumers keep the net8.0 assets. Tests already ran on net10.0 only, and stay that way (as agreed with @ewoutkramer for the whole chain).
  • PublicAPI/net10.0. Firely.Fhir.Validation tracks its public API per framework, because the InvariantValidator records generate covariant Clone methods on net8.0 but not on netstandard2.1. net10.0 behaves like net8.0, so its file is a copy of the net8.0 one, and the API analyzers accept it.
  • Fix: ChildrenValidator.TryGetValue. It used #if NET8_0, which only matches net8.0 exactly. On net10.0 it fell back to the netstandard2.1 signature without [MaybeNullWhen(false)], which fails the build (CS8601 as an error). Now NET8_0_OR_GREATER. This was the only exact-framework #if in the repo.
  • Benchmarks. Benchmarks, the only Exe project, moves to net10.0.
  • Firely.Fhir.Packages 6.2.0 in firely-validator-api-tests.props (the hard-coded version, previously 6.1.0). It is the first release with a net10.0 target. FirelySdkVersion was already 6.6.0 on develop.
  • .slnx (separate commit). Firely.Validator.API.sln becomes Firely.Validator.API.slnx via dotnet sln migrate, with the same 16 projects. The pipeline passes the solution file to the shared build template explicitly. The pipeline was already on SDK 10.0.x.

Verification (local, macOS, SDK 10.0.302)

  • dotnet build -c Release: 0 errors. The only warning, NU1603 on Benchmarks (Hl7.Fhir.Specification.Data.R4 6.0.0-rc2 is no longer on the feed), was already there.
  • Tests on net10.0, all pass:
    • Firely.Fhir.Validation.Tests 314/314
    • Compilation.STU3.Tests 176 (+3 skipped)
    • Compilation.R4.Tests 504 (+3 skipped)
    • Compilation.R4B.Tests 135 (+3 skipped)
    • Compilation.R5.Tests 330 (+3 skipped)
    • Hl7.Fhir.Validation.R5.Tests 2/2. It isn't in the solution, but CI's testProjects glob picks it up.

Running the R4 compilation tests rewrites TestData/issue-165/fhirpkg.lock.json: a new timestamp, and KBV.Basis lower-cased by the newer Firely.Fhir.Packages. That side effect is not part of this PR.

🤖 Generated with Claude Code

eugene-blokhin and others added 3 commits October 7, 2026 11:32
- Libraries target net8.0;net10.0;netstandard2.1 (additive, non-breaking).
  Tests already target net10.0 only.
- Firely.Fhir.Validation gets a PublicAPI/net10.0 file: like net8.0, net10.0
  generates the covariant Clone methods of the InvariantValidator records.
- ChildrenValidator.TryGetValue used `#if NET8_0`, so on net10.0 it fell back
  to the netstandard2.1 signature without [MaybeNullWhen(false)] (CS8601 as an
  error). Use NET8_0_OR_GREATER.
- Benchmarks (the only Exe project) moves to net10.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6.2.0 is the first Firely.Fhir.Packages release with a net10.0 target. The
Firely .NET SDK is already at 6.6.0 on develop.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…slnx

Generated with `dotnet sln migrate`; the project set is unchanged. The
pipeline now passes the solution file to the shared build template
explicitly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 7, 2026 09:33

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟢 Approval recommended

The framework, API, solution, dependency, and pipeline changes are consistent and no unresolved defects were identified.

Review effort: Balanced
Findings: None

What changed in this PR

Adds .NET 10 support and migrates the repository to the .slnx solution format.

Changes:

  • Adds net10.0 library and benchmark targets.
  • Adds .NET 10 API tracking and correct nullable annotations.
  • Updates dependencies, solution format, and CI configuration.
File Description
test/​Benchmarks/​Benchmarks.csproj Targets benchmarks at .NET 10.
src/​Firely.Fhir.Validation/​PublicAPI/​net10.0/​PublicAPI.Unshipped.txt Defines the .NET 10 public API surface.
src/​Firely.Fhir.Validation/​Impl/​ChildrenValidator.cs Applies nullable annotation to .NET 8 and later.
src/​Firely.Fhir.Validation/​Firely.Fhir.Validation.csproj Documents framework-specific API behavior.
Firely.Validator.API.slnx Introduces the migrated 16-project solution.
Firely.Validator.API.sln Removes the legacy solution format.
firely-validator-api.props Adds the .NET 10 library target.
firely-validator-api-tests.props Updates Firely.Fhir.Packages to 6.2.0.
build/​azure-pipelines.yml Configures CI to use the .slnx solution.

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

@mmsmits
mmsmits enabled auto-merge October 7, 2026 11:04
@mmsmits
mmsmits merged commit 6260800 into develop Oct 7, 2026
4 checks passed
@mmsmits
mmsmits deleted the feature/VONK-10067-migrate-to-net-10 branch October 7, 2026 11:05
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.

4 participants