Skip to content

main: move to the .NET 11 GA SDK and the 11.0.0 test packages, and repeat the retarget measurements #532

Closed

Description

@CaffeinatedCoder

Problem

.NET 11 has been generally available since 2026-11-10, and main is still on the RC2 toolchain:

Npgsql.EntityFrameworkCore.PostgreSQL is at 11.0.0-rc.3 and pins EF Core to exactly 11.0.0-rc.3.26522.148. So EF Core can't move to 11.0.0 here yet (NU1107). That move is #533.

Change

  • global.json to SDK 11.0.100, and actions/setup-dotnet without the prerelease flag.
  • The test packages that don't depend on EF Core to 11.0.0: Microsoft.AspNetCore.OpenApi, Microsoft.AspNetCore.TestHost, Microsoft.Extensions.Configuration and its Binder. MSTest to the newest. Close Bump the test-dependencies group with 5 updates #531.
  • Npgsql's provider, its NodaTime plugin and Microsoft.EntityFrameworkCore.Design to rc.3, in one change.
  • Remove DOTNET_ROLL_FORWARD_TO_PRERELEASE and the "RC" wording wherever the build or the docs still carry them.

Measure, with the output in the PR

Done when

main builds and passes on SDK 11.0.100 in CI, and the three measurements are recorded here.

Activity

  1. added this to the 11.0.0 milestone on Nov 11, 2026
  2. added
    choreBuild, CI, packaging, refactoring with no behaviour change
    package/nodatimeAffects CodoMetis.ValueRanges.NodaTime
    package/efcoreAffects CodoMetis.ValueRanges.EFCore.PostgreSQL
    area/releaseVersioning, changelogs, release wiring
    package/coreAffects CodoMetis.ValueRanges
    package/efcore-nodatimeAffects CodoMetis.ValueRanges.EFCore.PostgreSQL.NodaTime
    on Nov 11, 2026
  3. CaffeinatedCoder commented on Nov 11, 2026

    @CaffeinatedCoder
    OwnerAuthor

    Measured 2026-11-11 on build/532-net11-ga-sdk at cbfa4b1 (macOS arm64): SDK 11.0.100, runtime 11.0.0, Npgsql.EntityFrameworkCore.PostgreSQL and .NodaTime 11.0.0-rc.3, EF Core 11.0.0-rc.3.26522.148 (the build still resolves Npgsql 10.0.3). Docker, CI=true.

    Every suite passes

    CodoMetis.ValueRanges.Tests                     Passed: 1399
    CodoMetis.ValueRanges.NodaTime.Tests            Passed:  239
    EFCore.PostgreSQL.Tests (translation)           Passed:  403
    EFCore.PostgreSQL.NodaTime.Tests                Passed:  107
    AspNetCore.Tests                                Passed:   92
    Conventions.Tests                               Passed:  417
    EFCore.PostgreSQL.IntegrationTests  on 16       Passed:  368
    InfinityDisabled.IntegrationTests   on 16       Passed:    7
    EFCore.PostgreSQL.IntegrationTests  on 18       Passed:  368
    InfinityDisabled.IntegrationTests   on 18       Passed:    7
    

    The core suite passes only with #535's change: on SDK 11.0.100 its run did not end before.

    The four fixes of #292 are still needed

    Each fix was stripped alone, its tests were run, then it was restored.

    Fix Stripped Result
    #286, hour 24 StartsWithHour24 returns false TemporalLiteralGrammarTests: 7 of 115 fail, "Expected exception of exact type FormatException but no exception was thrown". The 11.0.0 runtime reads hour 24.
    #287, RangeSet.Contains RangeSetContainsRewriter out of the interceptor RangeSet_Contains_Set, _Value, _RangeColumn fail with the ArgumentException from EF Core's Queryable.Contains rewrite.
    #289, jsonb_set_lax the name removed from ValueSetSqlGuard's match ExecuteUpdateGuardTests 6 of 7 fail, ExecuteUpdateJsonTests (PostgreSQL 16) 7 of 13 fail: the refusal names the column, not the path.
    #290, empty captured collection EmptyCollectionRewriter.Rewrite returns its input 3 of the 5 AnEmptyCollection* tests fail: 42883: operator does not exist: text && int4range.

    Native AOT

    test/consumer-smoke-test.sh passes on the GA SDK: 99 ok lines, no FAIL, the AOT consumer published and run as a native binary, the ComplexIndexes consumer skipped as before.

    The trap of #291 is still in .NET 11.0.0, so the workaround stays. The minimal repro from dotnet/runtime#136073, published with Native AOT on SDK 11.0.100 (ILCompiler 11.0.0):

    Default IFormattable.ToString Result
    AggressiveInlining, as in the upstream repro prints the runtime line, then SIGTRAP, exit 133
    NoInlining Object, String, done, exit 0

    The fix is in dotnet/runtime's main (dotnet/runtime#136128). Its backport to release/11.0, dotnet/runtime#136148, is labelled Servicing-approved and is still open, so it should arrive in an 11.0.x servicing release. The comment in IValueSetFactory.cs says so now.

    closed is stable C# 15

    On the GA compiler (5.12.0-1.26529.118), with a library of one closed record and five nested sealed records, built for net10.0 and net11.0:

    Case Result
    default language version net11.0 is 15.0, net10.0 is 14.0
    library, no LangVersion net11.0 builds. net10.0: CS9327: Feature 'closed classes' is not available in C# 14.0. Please use language version 15.0 or greater.
    library, LangVersion 15 builds for both, with the IsClosedTypeAttribute polyfill under #if !NET11_0_OR_GREATER
    net11.0 consumer, either asset a complete switch with no discard builds with no warning; a missing arm is CS8509 naming Probe.IntRange.Infinite; a kept _ => throw arm raises nothing
    net10.0 consumer on SDK 11, LangVersion 15 the same as net11.0
    net10.0 consumer on SDK 11, default language (14) as today: a switch with no discard is CS8509, "the pattern '_' is not covered"
    net10.0 consumer on SDK 10.0.303 as today, the same CS8509; builds and runs
    a type in another assembly derives from it CS9382

    So no LangVersion preview is needed, and #149 can go into a stable package. One thing the RC2 probe did not show: a net10.0 consumer gets the check only with LangVersion 15, because net10.0 defaults to C# 14 even on SDK 11. Nothing breaks for a consumer who doesn't set it. #534 and #149 carry that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/releaseVersioning, changelogs, release wiringchoreBuild, CI, packaging, refactoring with no behaviour changepackage/coreAffects CodoMetis.ValueRangespackage/efcoreAffects CodoMetis.ValueRanges.EFCore.PostgreSQLpackage/efcore-nodatimeAffects CodoMetis.ValueRanges.EFCore.PostgreSQL.NodaTimepackage/nodatimeAffects CodoMetis.ValueRanges.NodaTime

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions