Repository navigation
Update to .NET 11 RC1 SDK - #19999
Conversation
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 19999Or
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 19999" |
There was a problem hiding this comment.
🟡 Changes recommended
Template tests now incorrectly use the .NET 11 SDK for .NET 10-specific validation.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Updates Aspire’s development and CI toolchain to .NET 11 RC1.
Changes:
- Pins the repository SDK to .NET 11 RC1.
- Updates .NET 11 template and ASP.NET Core asset versions.
File summaries
| File | Description |
|---|---|
global.json |
Updates the repository SDK/tool version. |
eng/Versions.props |
Updates .NET 11 test and template assets. |
Review details
- Files reviewed: 2/2 changed files
- Comments generated: 1
- Review effort level: Balanced
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
There was a problem hiding this comment.
🔵 Needs a closer look
The template harness now incorrectly uses the .NET 11 SDK for its .NET 10 SDK test matrix.
Review details
Suppressed comments (1)
global.json:13
- This now makes the template harness install the .NET 11 SDK into both its
dotnet-10anddotnet-11test directories.tests/Shared/Aspire.Templates.Testing.targets:17-20derivesSdkVersionForNet10TFMfrom thistools.dotnetvalue, while the template matrix explicitly expectsTestSdk.Net10not to supportnet11.0(TemplateTestsBase.cs:352-360). Those tests will either fail or stop exercising the .NET 10 SDK. Please add a dedicated .NET 10 SDK version property and update the template provisioning target to use it instead of parsingglobal.json.
"dotnet": "11.0.100-rc.1.26425.128",
- Files reviewed: 2/2 changed files
- Comments generated: 0 new
- Review effort level: Balanced
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
🔵 Needs a closer look
The changed Helix infrastructure path needs explicit classification in the test-trigger map.
Review details
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
tests/helix/send-to-helix-inner.proj:16
- This AzDO-only
.projis consumed byeng/pipelines/templates/BuildAndTest.yml:301-305but is outsideAspire.slnx. Becausetests/helix/**is neither routed nor ignored ineng/github-ci/test-trigger-map.yml, SelectTests treats a Helix-only change as unowned and unnecessarily forces the full GitHub PR matrix. Perdocs/ci/test-trigger-map.md:146-159, explicitly classify this no-PR-CI path (for example, add a documentedtests/helix/**ignore entry).
- Files reviewed: 6/6 changed files
- Comments generated: 0 new
- Review effort level: Balanced
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
🔵 Needs a closer look
The changed Helix CI input is not explicitly classified in the test trigger map.
Review details
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
tests/helix/send-to-helix-inner.proj:16
- Please also classify
tests/helix/**ineng/github-ci/test-trigger-map.yml(most likely underignoreas AzDO-only, unless a GitHub verifier is added). This project is consumed by the public Helix pipeline (eng/pipelines/templates/BuildAndTest.yml:290-305) but is not represented in the solution ProjectGraph; the map's Layer 2 contract requires such inputs to be explicitly accounted for (eng/github-ci/test-trigger-map.yml:68-70). Otherwise edits here fall through to the unattributedALLfallback rather than recording their actual CI ownership.
- Files reviewed: 7/7 changed files
- Comments generated: 0 new
- Review effort level: Balanced
21df644 to
96373e9
Compare
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
🟡 Changes recommended
The .NET 10 template-test slot uses 10.0.400 instead of the documented and previously pinned 10.0.401.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 16/16 changed files
- Comments generated: 1
- Review effort level: Balanced
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Tests selectorSelects the full PR test matrix + all PR-gated jobs (ALL) — a rule matching 'eng/Versions.props' selects ALL Advisory workflow impact (4)
Selection computed for commit |
|
✅ No documentation update needed. Step 5 branch taken: Triggered signals (1): Verification of remaining changed files (16 total): All are internal engineering/build changes with no Aspire product user-facing surface:
(summary truncated) |
|
The CI build failed due to test failure(s) that appear unrelated to the PR changes. These may be flaky tests. Suspected flaky test(s): Suggested actions:
You can re-run the failed jobs from the workflow run page. |
## Description ### What broke Deployment tests can be dynamically skipped—for example, when Azure regional capacity is unavailable. MTP represents a run containing only skipped tests with exit code `8`. The workflow already passed `--ignore-exit-code 8`. That option normalizes the **test module's** result so an expected skip does not fail the job. ### Why it started failing The .NET 11 RC1 SDK has a bug in how `dotnet test` combines results from all test modules ([dotnet/sdk#56214](dotnet/sdk#56214), originally reported as [microsoft/testfx#11145](microsoft/testfx#11145)). The test module accepts `--ignore-exit-code 8` and exits `0`. The SDK then recalculates the overall result, treats an all-skipped run as "zero tests," and returns `8`. ```text Test module → exit 8 → --ignore-exit-code 8 → success ↓ .NET 11 RC1 dotnet test aggregate → zero tests → exit 8 → workflow failure ``` The Deployment E2E history confirms the timing: - [September 10](https://github.com/microsoft/aspire/actions/runs/34432356786), using .NET 10.0.401: `AzureConnectorNamespaceDeploymentTests` skipped its only test, reported `Zero tests ran`, and the job succeeded. - #19999 then updated the repository to .NET 11 RC1. - [September 11](https://github.com/microsoft/aspire/actions/runs/34557498536), using .NET 11 RC1: the same test was skipped, but `dotnet test` returned exit code `8` and the job failed. The SDK fix merged in [dotnet/sdk#56219](dotnet/sdk#56219) and was backported to the .NET 11 RC1 branch in [dotnet/sdk#56296](dotnet/sdk#56296). Aspire's pinned `11.0.100-rc.1.26425.128` SDK predates that backport. ### The fix The affected workflows capture the aggregate exit code and pass it through checked-in Bash or PowerShell normalizers. Exit code `8` becomes success; actual test failures and host errors remain failures. - **Deployment E2E and non-NuGet shared tests** use `dotnet test`, so they normalize the aggregate result. - **NuGet-dependent tests** execute the test assembly directly, where the existing module-level option still returns success. The regression tests execute the checked-in scripts directly for exit codes `0`, `8`, `2`, and `7` instead of extracting and rewriting script fragments from YAML. Conditional test selection also routes changes to the shared runner and Deployment E2E consumers. **This is a temporary workaround.** Remove the aggregate `dotnet test` exit-code normalization after Aspire upgrades to a .NET 11 SDK build containing the upstream fix. ### Surprises and call-outs This fix also updates the non-NuGet paths in the shared `run-tests.yml` workflow. Those paths have the same aggregate exit-code behavior and are used by regular, quarantine, and outerloop test lanes. ## Checklist - Is this feature complete? - [x] Yes. Ready to ship. - [ ] No. Follow-up changes expected. - Are you including unit tests for the changes and scenario tests if relevant? - [x] Yes - [ ] No - Did you add public API? - [ ] Yes - If yes, did you have an API Review for it? - [ ] Yes - [ ] No - Did you add `<remarks />` and `<code />` elements on your triple slash comments? - [ ] Yes - [ ] No - [x] No - Does the change make any security assumptions or guarantees? - [ ] Yes - If yes, have you done a threat model and had a security review? - [ ] Yes - [ ] No - [x] No <!-- START COPILOT CODING AGENT SUFFIX --> - Fixes #18629 --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: radical <1472+radical@users.noreply.github.com> Co-authored-by: Ankit Jain <radical@gmail.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Description
Update the repository build SDK to .NET 11 RC1 so development and CI use the supported release-candidate toolchain instead of .NET 10. The existing .NET 11 template test assets and ASP.NET Core template asset versions are also updated from Preview 6 to the matching RC1 build.
The SDK is pinned to
11.0.100-rc.1.26425.128, with matching runtime assets pinned to11.0.0-rc.1.26425.128. The repository toolset explicitly installs the .NET 8, 9, and 10 Core and ASP.NET Core runtimes for both x64 and arm64 so template tests and remaining framework-dependent test assets can run alongside the .NET 11 SDK.Build and CI utilities that run in SDK-only jobs now target
net11.0, includingSelectTests,CreateLayout,GenerateTestSummary, andGenerateCITimeline. In particular, movingCreateLayoutto the active SDK runtime avoids a Windows ARM64 failure where the ARM64 host attempted to load the x64 .NET 10hostpolicy.dllfrom the repository toolset root. Microsoft.Build'snet10.0managed assets remain compatible with thenet11.0selector.The template test matrix keeps explicit SDK properties for .NET 8, 9, and 10 while the active .NET 11 SDK follows
global.json. This preserves the .NET 10 SDK test slot at10.0.401afterglobal.jsonmoves to .NET 11 and avoids duplicating the repository SDK version.CLI dotnet-tool packaging now enables RID-specific package orchestration only while packing the explicit RID package. The cross-platform pointer package retains all seven RID mappings without asking the .NET 11 SDK to rebuild those RID packages concurrently into one publish directory.
The Blazor hosted playground and tests now use the
ResolveWebAssemblyProjectReferencesimplementation provided by the .NET 11 Static Web Assets SDK. Synthetic test projects declare a target framework and restore before invoking the SDK target.Validation:
restore.cmdcompleted successfully and provisioned the .NET 8, 9, and 10 Core and ASP.NET Core runtime toolsets alongside SDK11.0.100-rc.1.26425.128.8.0.415,9.0.306,10.0.401, and11.0.100-rc.1.26425.128.Sign.projcompleted in dry-run/test-sign mode againstAspire.Dashboard.Sdk.win-x64, including the five third-party assemblies reported bySIGN004.SelectTestsWorkflowTestspassed onnet11.0(6 tests).SelectTests --helpran successfully with runtime roll-forward disabled, confirming direct use of the .NET 11 runtime.Aspire.Hosting.Blazor.Testspassed (88 tests).ResolveWebAssemblyProjectReferencestarget resolved the real BlazorHosted client project.Aspire.Cli.win-x64and the payload-freeAspire.Clipointer package. The pointer settings retain all seven RID mappings.dotnet build tests/Aspire.Templates.Tests/Aspire.Templates.Tests.csproj --no-restore /p:SkipNativeBuild=truesucceeded..\dotnet.cmd msbuild eng\Bundle.proj /restore /p:Configuration=Debug /p:TargetRid=win-x64 /p:BundleVersion=ci-bundlepayload /p:SkipNativeBuild=true /p:ContinuousIntegrationBuild=true.git diff --checkpassed.Stress.ApiService,Stress.Empty,Stress.TelemetryService, andAspire.Dashboardprocesses were locking their output binaries.Fixes # (issue)
Checklist
<remarks />and<code />elements on your triple slash comments?