You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This retargets the Aspire CLI from net10.0 to net11.0, with only the changes needed to build, publish Native AOT, package, and pass tests. Follow-up PRs will start using new .NET 11 features.
User-facing impact
Nothing changes in behavior for users of the native aspire binary.
The Aspire.Cli dotnet tool package layout changes. The platform-specific packages (Aspire.Cli.<rid>) now put the binary under tools/any/<rid>/ instead of tools/net10.0/<rid>/. If they used tools/net11.0/<rid>/, SDKs older than .NET 11 would fail dotnet tool install -g Aspire.Cli with "Settings file 'DotnetToolSettings.xml' was not found in the package". The pointer package (Aspire.Cli) was already tools/any/any/. I verified that a locally built package installs and runs with both the .NET 10.0.401 and .NET 11 SDKs.
Changes
Retarget
Aspire.Cli, Aspire.Cli.Tests, Aspire.Cli.Benchmarks, and eng/clipack (Common.projitems, Aspire.Cli.NativeSymbols.proj) now target net11.0.
Scripts, CI, the devcontainer, extension scripts, and docs that point at artifacts/bin/Aspire.Cli/<config>/net10.0 now use net11.0.
Native AOT trimming
The TrimmerSingleWarn configuration for Microsoft.CSharp / System.Linq.Expressions moved to ResolvedFileToPublish after _PrepareTrimConfiguration. In .NET 11, ILC reads trim metadata from there instead of ManagedAssemblyToLink, and the old location caused IL3050 errors.
Compiler
Removed using System.Net.Http.Json from 5 files. It's an implicit using on net11.0, so the explicit using triggered IDE0005.
The RID-specific tool package is packed with SelfContained=true, so the SDK uses the TFM-agnostic tools/any/<rid>/ layout. PublishAot=true alone doesn't imply this here. The SDK only infers SelfContained from PublishAot when _IsPacking is set by dotnet pack, and clipack packs through the MSBuild task.
eng/scripts/verify-cli-tool-nupkg.ps1 now requires tools/any/<rid>/ in the RID package and tools/any/any/ in the pointer package. Packaging runs with the repo's newer SDK, so this check is what catches a regression back to a tools/<tfm>/ layout.
The native symbols package now uses tools/any/<rid>/ too, so it keeps mirroring the tool package layout.
Tool-store detection (DotNetToolDetection)
The installed-tool store is now recognized only under tools/any/<rid>/, which is what the self-contained RID package installs. tools/net10.0/ and tools/net11.0/ paths are no longer treated as dotnet-tool installs, and the tests cover this.
The Aspire.Cli.Tests suite passes locally. The two failures I saw also fail on main in my environment, or are flaky.
dotnet publish -r win-x64 of the CLI succeeds with no trim/AOT warnings, and the native aspire --version runs.
The win-x64 tool packages build locally with the tools/any/ layout and pass verify-cli-tool-nupkg.ps1. Copies rewritten to tools/net11.0/ are rejected.
I installed the tool package with the .NET 10.0.401 and .NET 11 SDKs and ran it with both.
Fixes # (issue)
Checklist
Is this feature complete?
Yes. Ready to ship.
No. Follow-up changes expected.
Are you including unit tests for the changes and scenario tests if relevant?
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
No
Does the change make any security assumptions or guarantees?
Yes
If yes, have you done a threat model and had a security review?
Retarget the Aspire CLI (and its test/benchmark projects and clipack packaging) from net10.0 to net11.0 with the minimal changes needed to build, publish NativeAOT, and pass tests. Follow-up PRs will adopt new .NET 11 features.
- Retarget Aspire.Cli, Aspire.Cli.Tests, Aspire.Cli.Benchmarks, eng/clipack.
- Move the TrimmerSingleWarn configuration to ResolvedFileToPublish after _PrepareTrimConfiguration, since .NET 11 ILC no longer reads ManagedAssemblyToLink.
- Remove 'using System.Net.Http.Json' which is now an implicit using on net11.0 (IDE0005).
- Recognize tools/net11.0 in dotnet tool store path detection.
- Update scripts, CI, devcontainer and docs that reference artifacts/bin/Aspire.Cli/<config>/net10.0.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The CLI now only targets net11.0, so tool packages always lay out the binary under tools/net11.0/<rid>/. Drop the net10.0 allowance and update test fixtures accordingly.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The reason will be displayed to describe this comment to others. Learn more.
Copilot review overview
🔵 Needs a closer look
The acquisition scripts were modified without the required corresponding help-output test updates.
Review effort: Balanced Findings: None
Previously missed (2)
In code that hasn't changed since last review
Add PowerShell test for net11.0 local-build help output
eng/scripts/get-aspire-cli-pr.ps1:89
This changes get-aspire-cli-pr.ps1 without updating its required PowerShell tests. Add a normalized help-output assertion in PRScriptPowerShellTests.cs for the net11.0 local-build example so the documented path cannot become stale on the next retarget.
Add shell test for net11.0 local-build help output
eng/scripts/get-aspire-cli-pr.sh:119
This changes get-aspire-cli-pr.sh without updating its required shell tests. Add a help-output assertion in PRScriptShellTests.cs for the net11.0 local-build example so the documented path cannot become stale on the next retarget.
- Pack the RID-specific Aspire.Cli dotnet tool as self-contained so the SDK lays it out as tools/any/<rid>/ instead of tools/net11.0/<rid>/. Older SDKs (e.g. .NET 10) can't install a tool whose only tools/<tfm> folder is newer than themselves, which broke DotnetToolSmokeTests.
- Normalize the root command name in help snapshots. .NET 11 reports the apphost invocation name in Environment.GetCommandLineArgs()[0] (dotnet/runtime#131671), and System.CommandLine's Path.GetFileNameWithoutExtension turns the extension-less 'Aspire.Cli.Tests' apphost into 'Aspire.Cli' on Linux/macOS (dotnet/command-line-api#2850).
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This changes the PowerShell script's user-facing help example without updating PRScriptPowerShellTests; its help coverage currently checks only parameter names. Add an assertion for the artifacts\bin\Aspire.Cli\Debug\net11.0 example so the acquisition script and its corresponding tests stay aligned.
Add shell help example assertion
eng/scripts/get-aspire-cli-pr.sh:119
This updates a user-facing --help example, but PRScriptShellTests was not updated; its help coverage currently checks only option names. Add an assertion for the artifacts/bin/Aspire.Cli/Debug/net11.0 example so the acquisition script and its corresponding tests stay aligned.
- run-e2e.js: update the remaining artifacts/bin/aspire/Debug CLI candidates to net11.0 so local extension E2E doesn't pick up a stale .NET 10 build.
- DotNetCliRunnerTests: launch the same dotnet host as the test runner (DOTNET_HOST_PATH) for the child 'dotnet msbuild'. Falling back to 'dotnet' on PATH can pick a system SDK while inheriting the runner's repo-local MSBuildExtensionsPath/MSBuildSDKsPath, which fails with MSB4216/MSB4027.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add PowerShell help test for updated net11.0 example
eng/scripts/get-aspire-cli-pr.ps1:89
The repository's acquisition-script rule requires changes to get-aspire-cli-pr.ps1 to update PRScriptPowerShellTests.cs. The current help tests do not verify this example, so the new net11.0 path can drift without detection. Add a focused assertion that -? renders the updated example.
Add shell help test for updated net11.0 example
eng/scripts/get-aspire-cli-pr.sh:119
The repository's acquisition-script rule requires changes to get-aspire-cli-pr.sh to update PRScriptShellTests.cs. The existing help tests only check the generic usage text and parameter names, so this changed net11.0 example is not protected. Add a focused assertion that --help renders this updated example.
Starting with .NET 11, the System.Text.Json source generator preserves init-only property initializers when a property is absent from JSON (dotnet/runtime#124650). SkillBundleSkill.Files defaults to [], so a manifest skill without 'files' now deserializes to an empty array instead of null, and the null-only check no longer rejected it. Require at least one file, matching AspireSkillsBundleProvider.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Selects the full PR test matrix + all PR-gated jobs (ALL) — run-all fallback: '.devcontainer/devcontainer.json' is neither Layer-1-owned nor matched by a Layer 2 rule
… layout
Documents microsoft/aspire#20436, which retargets Aspire.Cli from net10.0
to net11.0 and changes the RID-specific dotnet tool package layout from
tools/<tfm>/<rid>/ to a version-agnostic tools/any/<rid>/ layout so
dotnet tool install -g Aspire.Cli keeps working from older SDKs.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
pr_body_has_user_facing_section: PR body's "### User-facing impact" section states the Aspire.Cli dotnet tool package layout changes from tools/net10.0/<rid>/ to tools/any/<rid>/, to avoid dotnet tool install -g Aspire.Cli failing on older SDKs with "Settings file 'DotnetToolSettings.xml' was not found in the package".
pr_body_has_cli_flag_mention: PR body references the native aspire --version command as part of validation.
mcp_tool_file_changed: ListStructuredLogsTool.cs, ListTraceStructuredLogsTool.cs, ListTracesTool.cs changed, but only to remove an unused using System.Net.Http.Json; (implicit in net11.0) — no behavior/API change, so no docs impact from this signal.
Documented the one real user-facing change (target-framework retarget + tools/any/ packaging layout) in two places:
src/frontend/src/content/docs/get-started/install-cli.mdx — added a note under the NuGet install tab explaining the CLI ships as a self-contained NativeAOT binary with a version-agnostic tools/any/ layout, so dotnet tool install -g Aspire.Cli works from any supported SDK.
src/frontend/src/content/docs/whats-new/aspire-13-6.mdx — added a "CLI now built on .NET 11" subsection under "Aspire CLI enhancements" describing the retarget and packaging layout change, with no behavior change for the native binary.
…ps (#1780)
## Summary
<!-- Describe what this pull request changes and why. -->
Reconcile the 13.6 wiki audit and **all 25 open `docs-from-code`
proposals targeting `release/13.6`** against the actual release source.
Add missing canonical guidance rather than putting all coverage in
What's new. This is a new, isolated feature PR into `release/13.6`; it
does not update the release rollup #1599, merge or close another
proposal, or push directly to a release branch.
**Draft with explicit remaining packaging/validation gates:** the six
REPL walkthroughs are source-verified, but current publicly available
13.6 packages do not contain the late `WithRepl` exports. Generated API
catalogs have deliberately not been fabricated or refreshed from 14.x.
See the open checklist below.
### Evidence baseline
- Documentation base: `717442f6666948bcf77f3d704dc2dadf7c080ec2`.
- Product source of truth:
[`microsoft/aspire@e8fd6fbb954f50ccd2e66479538392f65e13e71d`](https://github.com/microsoft/aspire/tree/e8fd6fbb954f50ccd2e66479538392f65e13e71d),
current `release/13.6` at audit time. Source was read from that Git
object, not the stale source working directory.
- [13.6 wiki](https://github.com/microsoft/aspire/wiki/13.6-Change-log)
snapshot `8e01a371d4f16a1306e48174d4cf1fdeca714348`, whose cutoff is
product PR 20511. Later backports 20541/20546/20548 are included here.
- Proposal base branches alone were **not** used as proof of release
membership. Direct ancestry and known release backports were checked.
Four fallback-targeted proposals are excluded below.
- Wiki link corrections: its REPL link #1752 actually covers Sandboxes;
the REPL proposal is #1740. Its AOT link #1714 covers PFX certificates,
not AOT.
### Complete audit-gap checklist
Checked items mean documentation coverage is implemented, not that cloud
deployment or every product runtime scenario was executed.
- [x] **1. Dotnet API graduation:** correct removal to **13.6**, not
14.0, in What's new, both Dotnet guides, and the diagnostic page;
preserve the prerelease package caveat. This applies to core
`AddDotnetProject`, `DotnetProjectResource`, and related
`WithBuildEnvironment` overloads, not all uses of the diagnostic.
Source: microsoft/aspire#20496.
- [x] **2. Sandboxes:** remove obsolete API suppressions in the article
and deployment guide while preserving Azure service preview/access and
prerelease package limitations. Source: microsoft/aspire#20483.
- [x] **3. Docked REPL documentation:** all six
PostgreSQL/MySQL/MongoDB/SQL Server/Redis/Valkey guides plus the article
now cover opt-in `WithRepl`/`withRepl`, run-only availability, actual
client privileges, credential handling, and explicit exit versus closing
a viewer. Source: microsoft/aspire#20419, backport of
microsoft/aspire#20231. Package-backed checks remain open below.
- [x] **4. Terminal CLI flag:** update current 13.6 article,
`with-terminal`, and all three terminal command references. Preserve
`terminals.v1` and experimental hosting API distinctions. Current
configuration/schema data had no flag entry to remove; historical 13.5
notes remain historical. Source: microsoft/aspire#20548.
- [x] **5. First-party Rust:** rewrite both canonical Rust guides around
`Aspire.Hosting.Rust`; document Cargo versus application arguments,
typed targets, debugging, generated Dockerfiles, workspace context, ABI
constraints, and Toolkit migration. Bacon remains explicitly
Toolkit-only. Add exact first-party package mapping. Source:
microsoft/aspire#18906 and current Rust README.
- [x] **6. Agent setup:** align command reference, skills guide,
AI-agent guide, and article on MCP opt-in, `--mcp`,
chained/non-interactive behavior, seven-skill catalog, Project v2
migration, and Copilot app detection. Also fix stale default-selection
text: all applicable bundle skills are preselected; companion tools
remain opt-in. Sources: microsoft/aspire#19893, microsoft/aspire#20405,
microsoft/aspire#19820.
- [x] **7. Deno AppHost runtime:** document Deno 2+ detection, commands,
permissions, native watch/type checking, doctor, and `DENO_CERT`,
separately from Deno guest hosting. Source: microsoft/aspire#18627,
distinct from microsoft/aspire#18628.
- [x] **8. Native AOT / Fluent UI v5:** concise article, dashboard
exploration, and standalone guidance; automatic packaged-dashboard
selection, no invented performance figures. Source:
microsoft/aspire#19565 and release packaging sources.
- [x] **9. NuGet:** document bundled in-process operations, credential
providers, non-interactive authentication, and realistic
troubleshooting. Correct the proposal's `dotnet nuget locals`
authentication advice: cache commands do not authenticate a feed.
Source: microsoft/aspire#20391.
- [x] **10. Multithreaded builds:** article and coordinated-build guide
explain `-mt`, SDK detection, distinct project/file-based SDK floors,
and fallback. Source: microsoft/aspire#20441.
- [x] **11. Radius:** add a real deployment guide with C#/TypeScript
setup, recipe-backed connections versus local endpoints, per-resource
credential behavior, unauthenticated Redis limitation, secret exposure
boundaries, and actionable runtime diagnostics 070–091. Wire navigation
and exact package mapping. Source: microsoft/aspire#19555 and release
README.
- [x] **12. Connection aliases:** replace contradictory no-encoding
guidance, retain composed logical-key-first lookup and portable-target
behavior, explain collision detection and custom-publisher metadata.
Source: microsoft/aspire#19729.
- [x] **13. Connector Namespace / Toolbox / provisioning:** add
Connector Namespace walkthrough, security/consent/revocation limits and
mapping/sidebar; add Foundry Toolbox walkthrough, connection properties,
roles, index prerequisites, approval enforcement boundaries, immutable
versions, and existing-resource behavior. Extend existing Azure
provisioning guide without a duplicate page. Sources:
microsoft/aspire#19024, microsoft/aspire#17742, microsoft/aspire#20131.
- [x] **14. Remaining high-impact items:** article covers opt-in
manifest-aware DNX and new-template CLI bundling (existing SDK guides
retained), migration skill and Copilot app detection; canonical inline
`CsiVolumeSourceV1`/`VolumeV1.Csi` example, management links, Cosmos
vNext telemetry, and AI Inference `GetModelInfoAsync`/`/info` health
checks with `DisableHealthChecks`. No Azure OpenAI health-check claim.
Sources: microsoft/aspire#19310, microsoft/aspire#19076,
microsoft/aspire#19826, microsoft/aspire#20070, microsoft/aspire#15671,
microsoft/aspire#15969.
- [x] **15. All 25 proposal dispositions:** listed below, including
newer dashboard backports and four exclusions. Existing Sandbox
inference coverage is retained rather than copied from a stale draft.
- [ ] **16. Refresh generated API/catalog/Twoslash data from an official
post-backport 13.6 build.** Existing `26473.12`/`a11eca96` data remains
untouched. The newest public `dotnet9` feed package checked,
`13.6.0-preview.1.26474.10` at
`43496a2a306c81c862c947b11b4f4e5494b6fe08`, still has no Redis
`WithRepl` in its actual package XML. Do not use 14.x, hand-edit
declarations, or attribute source changes to older binaries.
- [ ] **Validate the six REPL examples against that actual post-backport
SDK and running clients.** Their new TypeScript fences are plain
TypeScript, not annotated with unsupported Twoslash data. No existing
diagnostics are allowlisted or suppressed; no generated API exports are
fabricated. Enable Twoslash when the genuine catalog catches up.
### All 25 open proposal dispositions and provenance
Text is selectively adapted from these proposals, not merged wholesale.
#1778 and #1748 are authored by @sebastienros; the other proposals are
authored by the Aspire repo bot. The table credits the associated
product-change authors where supplied by the proposals. Existing PRs
remain open and unchanged.
| Docs PR | Release source / credited product author | Disposition |
| --- | --- | --- |
| #1778 | microsoft/aspire#19729 — @sebastienros | **Adopted:**
canonical connection-string alias correction, including logical-first
resolution and migration. |
| #1771 | microsoft/aspire#20481 — @sebastienros | **Excluded:** flat
polyglot feature keys are not in the audited release tip; no verified
backport. Preserve release key names. |
| #1770 | microsoft/aspire#20525 → microsoft/aspire#20548 — @mitchdenny
| **Corrected/adopted:** command guides plus the still-current 13.6
article, which the proposal incorrectly treats as historical. |
| #1769 | microsoft/aspire#20416 — @JamesNK | **Excluded:** brand hover
change has no verified 13.6 membership/backport. |
| #1768 | microsoft/aspire#20523 → microsoft/aspire#20546 — @JamesNK |
**Adopted:** run pin/unpin preserves selector and current selection. |
| #1766 | microsoft/aspire#20537 → microsoft/aspire#20541 — @mitchdenny
| **Adopted:** terminal dock empty state. |
| #1761 | microsoft/aspire#20490 → microsoft/aspire#20496 — @eerhardt |
**Corrected:** graduation is 13.6, package remains prerelease,
Blazor-specific exception retained. |
| #1760 | microsoft/aspire#20436 — @eerhardt | **Excluded:** CLI
net11/tools-any retarget is not in the audited release; no fallback-base
inference. |
| #1748 | microsoft/aspire#20131 — @sebastienros | **Adopted:** extend
existing provisioning guide with service-specific models/lookups and
projection limits. |
| #1744 | microsoft/aspire#20337 → microsoft/aspire#20441 — @karolz-ms |
**Adopted:** precise SDK-conditional multithreaded build coverage. |
| #1740 | microsoft/aspire#20231 → microsoft/aspire#20419 — @mitchdenny
| **Adapted:** all six guides; TypeScript-first tabs, source-verified
lifecycle/security. Actual post-backport SDK/runtime gate is open above.
|
| #1738 | microsoft/aspire#20158 → microsoft/aspire#20405 — @karolz-ms |
**Partly already covered / completed:** existing seven-skill catalog
retained; add project migration guidance and correct command
catalog/defaults. Do not misclassify the bundled skill as a companion
tool. |
| #1735 | microsoft/aspire#20334 — @karolz-ms | **Excluded:** enhanced
startup errors are not in the audited release; no verified backport. |
| #1731 | microsoft/aspire#19847 → microsoft/aspire#20391 — @eerhardt |
**Corrected/adopted:** in-process NuGet and real authenticated-restore
troubleshooting, not cache-command authentication. |
| #1719 | microsoft/aspire#20299 → microsoft/aspire#20407 — @JamesNK |
**Corrected/adopted:** cookie naming/scoping; identical names can
collide but do not guarantee cross-dashboard cookie decryptability or
shared sign-in. |
| #1664 | microsoft/aspire#20011 — @maddymontaquila | **Adopted:**
concise Azure environment icon release note. |
| #1628 | microsoft/aspire#17742 — @davidfowl | **Adapted/expanded:**
canonical Toolbox examples, consumer contract, role/index prerequisites,
approval/security and concurrency limits. |
| #1623 | microsoft/aspire#19810 — @mitchdenny | **Already covered:**
current Sandbox guide/article already describe compute inference,
explicit selection and external endpoints. Preserve that guidance while
removing obsolete suppressions. |
| #1620 | microsoft/aspire#19243 — @sebastienros | **Adapted:** AKS
credential-before-Helm cleanup and destructive-operation warning; omit
misleading ambient-context workaround. |
| #1614 | microsoft/aspire#19870 — @sebastienros | **Adopted:** typed
callback handle behavior in extension authoring and article. |
| #1574 | microsoft/aspire#19430 — @mitchdenny | **Adapted:** canonical
hostname inheritance, explicit-host precedence, catch-all default
backend. |
| #1570 | microsoft/aspire#19590 — @karolz-ms | **Adopted:** Dev Tunnel
URL regression troubleshooting. |
| #1565 | microsoft/aspire#19429 — @mitchdenny | **Corrected/adopted:**
Helm embedded parameters with real `refExpr` and `addParameter(name, {
value })`, not stringifying a handle or using an invalid actual-SDK
overload. |
| #1564 | microsoft/aspire#19026 — @karolz-ms | **Corrected/adopted:**
C#/TypeScript Dotnet gateway walkthrough. Retain both experimental
diagnostics; remove obsolete run-only restriction after
microsoft/aspire#19997 publishing support. Avoid imported ambiguous API
reference. |
| #1499 | microsoft/aspire#19248 — @IEvangelist | **Adopted:** describe
exact secret-value redaction and embedded-secret limit; release article
already covered the fix. |
### Important source-verified corrections to proposals / earlier audit
assumptions
-
[`BlazorGatewayExtensions.cs`](https://github.com/microsoft/aspire/blob/e8fd6fbb954f50ccd2e66479538392f65e13e71d/src/Aspire.Hosting.Blazor/BlazorGatewayExtensions.cs):
`AddDotnetProjectBlazorGateway` and the Dotnet `WithBlazorClientApp`
overload still carry `ASPIREDOTNETPROJECT001`; the class carries
`ASPIREBLAZOR001`. They share `WithBlazorClientAppCore`/`WithBlazorApp`
and the publish-companion path. Thus neither blanket diagnostic
retirement nor the proposal's old run-only claim is correct.
-
[`SkillDefinition.cs`](https://github.com/microsoft/aspire/blob/e8fd6fbb954f50ccd2e66479538392f65e13e71d/src/Aspire.Cli/Agents/SkillDefinition.cs)
sets bundled skills' `IsDefault=true`;
[`AgentInitCommand.cs`](https://github.com/microsoft/aspire/blob/e8fd6fbb954f50ccd2e66479538392f65e13e71d/src/Aspire.Cli/Commands/AgentInitCommand.cs)
selects the applicable catalog defaults for both flows. MCP has its own
standalone-only binding.
-
[`TypeScriptAppHostToolchainResolver.cs`](https://github.com/microsoft/aspire/blob/e8fd6fbb954f50ccd2e66479538392f65e13e71d/src/Aspire.Cli/Projects/TypeScriptAppHostToolchainResolver.cs)
is the source for Deno flags and certificate variable; guest Deno
hosting is separate.
- [`Radius
README`](https://github.com/microsoft/aspire/blob/e8fd6fbb954f50ccd2e66479538392f65e13e71d/src/Aspire.Hosting.Radius/README.md)
supplies the resource-specific credential rules and publish diagnostics,
not assumptions about local endpoints.
## Third-party links and affiliations
<!-- List third-party links and disclose material affiliations. -->
Links point to official Microsoft Learn, VS Code Marketplace debugger
extensions, Rust/Cargo/Bacon documentation, Radius documentation, and
source repositories. No sponsorship, commercial endorsement, or
affiliation claim is introduced. Maintainers should supply any personal
affiliation disclosure required by policy; automation has not inferred
one.
## Validation
<!-- List the checks you ran or explain why validation isn't needed. -->
- **97 passing focused unit checks** across API-reference
authoring/rendering, Twoslash blocks, file-tree formatting, CLI
configuration schema, SEO lengths, and resource catalog.
- **82 passing structured-data checks**, including exact integration
mapping uniqueness and page resolution.
- **11 C# samples compile**, zero warnings/errors, using genuine
`13.6.0-preview.1.26473.12` packages. Scope: Rust, Connector Namespace,
Radius, Toolbox, inline CSI, Helm, Blazor gateway, and provisioning.
`Projects.Api/Worker/Client` use compile-only `IProjectMetadata`
stand-ins; no claim of running those apps or provisioning cloud
resources.
- **10 TypeScript samples pass `tsc`** under `strict`, `NodeNext`, and
`ES2022` against three **unmodified actual SDK files**, not just the
site's declaration bundle. The fixture uses the exact `e8fd6fbb` release
`AtsCapabilityScanner` and genuine `26473.12`
TypeSystem/code-generator/integration binaries, whose informational
source is `a11eca96`. This is an isolated local generation fixture,
**not** a claim that official CLI generation or a new packaged release
was tested. An attempted restore with the older handed-off local CLI
could not discover an AppHost server; the bounded direct generator
fixture was used instead.
- The SDK scan is **not globally warning-free**: it reports a Radius
`withContainerImage` collision on `CSharpAppResource` and an App
Configuration `createRoleAssignment` overload collision. None of the
compiled examples calls those colliding methods; the warnings are
retained in evidence, not suppressed, and no generated declarations were
edited.
- Browser: Connector Namespace, Radius, both Rust pages, Foundry
hosting, and What's new return **HTTP 200**, correct headings, and no
rendered Twoslash errors. New guide/article page-local anchors and the
cross-page Blazor anchor resolve. Connector/Radius mobile layouts have
no horizontal overflow; Connector language-tab interaction works.
Standalone Astro preview emits expected `/api/live` 404s because
StaticHost is not running.
- `git diff --check` passes. No production `pnpm build`, cloud
deployment, REPL runtime session, full product suite, or blanket
validation of every pre-existing example was performed.
- Generated C#/TypeScript API data, declaration bundles, integration
catalogs, image catalogs, and contributor data are unchanged. Only the
authored package-to-guide mapping is updated.
**Before merging:** complete the two packaging/REPL checkboxes above,
inspect CI, and obtain human review. This PR intentionally does not
close or merge the source documentation proposals.
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This retargets the Aspire CLI from
net10.0tonet11.0, with only the changes needed to build, publish Native AOT, package, and pass tests. Follow-up PRs will start using new .NET 11 features.User-facing impact
aspirebinary.Aspire.Clidotnet tool package layout changes. The platform-specific packages (Aspire.Cli.<rid>) now put the binary undertools/any/<rid>/instead oftools/net10.0/<rid>/. If they usedtools/net11.0/<rid>/, SDKs older than .NET 11 would faildotnet tool install -g Aspire.Cliwith "Settings file 'DotnetToolSettings.xml' was not found in the package". The pointer package (Aspire.Cli) was alreadytools/any/any/. I verified that a locally built package installs and runs with both the .NET 10.0.401 and .NET 11 SDKs.Changes
Retarget
Aspire.Cli,Aspire.Cli.Tests,Aspire.Cli.Benchmarks, andeng/clipack(Common.projitems,Aspire.Cli.NativeSymbols.proj) now targetnet11.0.artifacts/bin/Aspire.Cli/<config>/net10.0now usenet11.0.Native AOT trimming
TrimmerSingleWarnconfiguration forMicrosoft.CSharp/System.Linq.Expressionsmoved toResolvedFileToPublishafter_PrepareTrimConfiguration. In .NET 11, ILC reads trim metadata from there instead ofManagedAssemblyToLink, and the old location caused IL3050 errors.Compiler
using System.Net.Http.Jsonfrom 5 files. It's an implicit using onnet11.0, so the explicit using triggered IDE0005.dotnet tool packaging (
eng/clipack/Common.projitems)SelfContained=true, so the SDK uses the TFM-agnostictools/any/<rid>/layout.PublishAot=truealone doesn't imply this here. The SDK only infersSelfContainedfromPublishAotwhen_IsPackingis set bydotnet pack, and clipack packs through the MSBuild task.eng/scripts/verify-cli-tool-nupkg.ps1now requirestools/any/<rid>/in the RID package andtools/any/any/in the pointer package. Packaging runs with the repo's newer SDK, so this check is what catches a regression back to atools/<tfm>/layout.tools/any/<rid>/too, so it keeps mirroring the tool package layout.Tool-store detection (
DotNetToolDetection)tools/any/<rid>/, which is what the self-contained RID package installs.tools/net10.0/andtools/net11.0/paths are no longer treated as dotnet-tool installs, and the tests cover this.Tests
aspire(ScrubRootCommandName()). Starting with .NET 11,Environment.GetCommandLineArgs()[0]is the apphost invocation name rather than the.dll(Fix Environment.GetCommandLineArgs()[0] to report the host invocation name dotnet/runtime#131671). System.CommandLine'sPath.GetFileNameWithoutExtensionthen turns the extension-lessAspire.Cli.Testsapphost intoAspire.Clion Linux/macOS (reported as RootCommand.ExecutableName truncates dotted app names on Linux/macOS when targeting .NET 11 dotnet/command-line-api#2850).Validation
Aspire.Cli.Testssuite passes locally. The two failures I saw also fail onmainin my environment, or are flaky.dotnet publish -r win-x64of the CLI succeeds with no trim/AOT warnings, and the nativeaspire --versionruns.tools/any/layout and passverify-cli-tool-nupkg.ps1. Copies rewritten totools/net11.0/are rejected.Fixes # (issue)
Checklist
<remarks />and<code />elements on your triple slash comments?