Skip to content

Spike: build and weave under the .NET 11 SDK before any net11.0 target (decision 120) #170

Open
1 of 1 issue completed

Description

@CaffeinatedCoder

Prerequisite of the net11.0 target in decision 120, a spike with no release attached. Today global.json pins SDK 10.0.4xx because a different Roslyn band can change what Metalama and the analyzers emit.

Measure, on an SDK 11 compiler (RC now, the general-availability SDK once it ships in November 2026):

  • the repository builds and its tests pass, with global.json moved to the SDK 11 band;
  • the packed net10.0 assets are unchanged by the new compiler (woven output compared);
  • a consumer on SDK 11 that references the existing 2.x packages builds, weaves and runs, and its generated code raises no new warning under the C# 15 default;
  • the consumer smoke test gains an SDK 11 lane, with a net11.0 consumer that holds the lower satellite versions (the NU1605 case).

Also measure, because decision 120 moves Metalama, in 2.4.0 since decision 129:

  • a CI job that builds the repository and its tests against Metalama 2027.0.4-preview (then the stable 2027.0) with no Metalama license on the machine, as dotnet.yml runs every job on 2026.1. Local runs are no evidence: this machine holds a license entry for 2027.0 and has compiler servers running;
  • the consumer matrix on SDK 11 and SDK 10: a direct Metalama.Framework 2026.1 reference beside the new packages (the NU1605 the changelog will describe), a direct 2027 reference beside the 2.x packages (measured to weave on 2026-10-29), and the same on rc.3 packages and the general-availability SDK;
  • the NU1605 measurement of the decision repeated on SDK 11 rc.3 or later.

Done when the answer is a record: what moved, what broke, and whether Metalama 2026.1 holds.

Done (2026-10-31): the RC3 rows. Decision 120's Metalama measurement repeated on SDK 11.0.100-rc.3.26522.148 with the 2.3.1 packages: every RC1 result holds, Metalama 2026.1 still runs projects at C# 14 (comment, #276, PR #277, KB-060). Found there: a web project on 2026.1 fails with LAMA0625 when SDK 11 is the only SDK installed (#275), which moved the Metalama 2027.0 move into 2.4.0 (decision 129, #280). Everything else above stays open.

Activity

  1. added
    choreBuild, CI, tooling, packaging, refactoring with no behaviour change
    area/releaseVersioning, changelogs, packaging and release wiring
    on Oct 29, 2026
  2. CaffeinatedCoder commented on Oct 31, 2026

    @CaffeinatedCoder
    OwnerAuthor

    The RC3 rows: Metalama 2026.1 holds. Measured 2026-10-31 on SDK 11.0.100-rc.3.26522.148 (macOS arm64) with the published 2.3.1 packages (Metalama.Framework 2026.1.30, compiler 2026.1.20), UseSharedCompilation=false, compiler servers shut down before each build, restored from nuget.org into an empty package folder. Spike spikes/Sdk11Rc3Metalama, fact KB-060, PR #277 (closes the sub-issue #276).

    Row RC3 RC1 (decision 120)
    1. net11.0 value object, no union builds, weaves, runs: From, Parse, JSON round trip builds and weaves
    2. #error version CS8304: compiler 2026.1.20, language version 14.0 (2026.1.31: compiler 2026.1.21, 14.0) 2026.1.20 at 14.0
    3. union declared in the project CS0106, CS1001, CS8803 the same
    4. union from a net11.0-only library holding it builds; a switch gives CS8652 "unions ... in Preview" the same
    5. warnings, console project none —
    5. warnings, web project see below LAMA0617
    6. direct Metalama.Framework 2027.0.5-preview compiler 2027.0.5-preview at 15.0; rows 1, 3 and 4 build and run 2027.0.4-preview at 15.0

    | 7. one project on net10.0;net11.0, Metalama.Framework 2027.0.5-preview, no LangVersion: #error version | compiler 2027.0.5-preview at 14.0 on net10.0, at 15.0 on net11.0 | not measured (2027 only on net11.0) |
    | 7. the same: value object | generated on both targets; both run From, Parse, JSON | not measured |
    | 7. the same: a union and switch inside #if NET11_0_OR_GREATER | builds on both targets, runs on net11.0 | not measured |
    | 7. the same: a union in a file under <Compile Remove="Net11Only/**" Condition="'$(TargetFramework)' == 'net10.0'" /> | builds on both targets, runs on net11.0 | not measured |
    | 7. contrast, the same project on 2026.1 | both targets at 14.0; either union fails on net11.0 with CS0106, CS1001, CS8803 | not measured |

    Control: the same union declaration and match compile and run with no TypeKit and no Metalama.

    No RC1 result changed. One thing the RC1 runs could not show, filed as #275: a web project (Microsoft.NET.Sdk.Web) on 2026.1 fails with LAMA0625 (the SDK 11 Razor compiler needs Roslyn 5.11 on RC1, 5.12 on RC3; Metalama 2026.1 bundles 5.9) when SDK 11 is the only SDK in its .NET installation:

    Web project 2026.1 2027.0.5-preview
    RC3 alone, net11.0 fails, LAMA0625 (2026.1.31 too) builds
    RC3 alone, net10.0 fails, LAMA0625 builds
    RC1 alone fails, LAMA0625 builds
    RC3 with SDK 10.0.403 beside it builds, LAMA0617 twice builds
    SDK 10.0.403, net10.0 builds builds

    Decision 120's RC1 runs had SDK 10.0.403 installed beside RC1, which is the "builds with LAMA0617" row. Its consequence line ("a warning, falling back to the SDK 10 Razor compiler") holds only with an SDK 10 in the same installation. The decision is not edited; #275 asks whether that needs a new record or only the 2.4.0 documents.

    Limits: this machine has a Metalama licensing entry for 2027.0, so the 2027 cells say nothing about a license-free build; no IDE, Linux, Windows or general availability SDK.

  3. CaffeinatedCoder commented on Oct 31, 2026

    @CaffeinatedCoder
    OwnerAuthor

    Decision 129 (#280): because of #275, Metalama 2027.0 moves into 2.4.0, which is tagged only on a stable 2027.0. The license-free CI job and the consumer matrix above are now 2.4.0 conditions, and #281 adds a lane with only SDK 11 installed and a web consumer.

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, packaging and release wiringchoreBuild, CI, tooling, packaging, refactoring with no behaviour change

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions