Provide a runtime installer that covers all shared frameworks, so multi-framework apps need only one install
- Dominant language
- C#
- Stars
- 18.3k
- Forks
- 5.6k
- PR merge metrics
- PR metrics pending
Description
A WPF app that also depends on ASP.NET Core (Kestrel, a SignalR client, etc.)
ends up with two shared frameworks in its runtimeconfig.json:
```json
"frameworks": [
{ "name": "Microsoft.WindowsDesktop.App", "version": "10.0.0" },
{ "name": "Microsoft.AspNetCore.App", "version": "10.0.0" }
]
```
On a clean Windows 11 machine with no .NET installed, this takes two separate runtime installs. The applaunch link sends the user to the Desktop Runtime first, and only after that is installed does the host discover that `Microsoft.AspNetCore.App` is missing too.
I understand from dotnet/sdk#33793 why this is inherent to the current shape of things. @vitek-karas described the sequencing problem there: with no .NET on the machine the host cannot know which frameworks the app needs, so `gui=true` is used as a hint to guess Desktop Runtime over the base runtime. That guess is right for most desktop apps, but it can never be right for an app that needs
Desktop plus ASP.NET Core, because no single existing installer covers both.
A runtime installer that includes all three shared frameworks would remove the need to guess. The first launch prompt could point at one installer that is correct for any framework-dependent app, desktop or otherwise.
**Why the existing options don't work for us**
Installing the SDK covers everything in one pass, and that is what we do internally. But we can't put "download the SDK" in end-user instructions — it is named and presented as a developer tool, and the payload is much larger than needed. `dotnetup` has the same problem from our side: it's a toolchain manager for user-level installs that expects a terminal, so it isn't an end-user deployment path either.
**Request**
Add an installer alongside the existing three on the download page — something like ".NET Runtime (All frameworks)" — that installs `Microsoft.NETCore.App`, `Microsoft.WindowsDesktop.App` and `Microsoft.AspNetCore.App` together. It wouldn't need to replace anything. Naming it clearly as a runtime rather than an SDK is the part that matters, so it can be referenced in end-user docs.
**Related**
- dotnet/sdk#33793 — the same scenario (WPF + ASP.NET Core), and the sequencing explanation behind the current `gui=true` heuristic.
- #121907 — the applaunch redirect currently landing on the generic download page, which makes picking the right installer harder still.
- dotnet/sdk#52888 — the team already treats "installing one shared framework should pull in what it depends on" as correct behaviour for `dotnetup`. This asks for the same principle in the end-user installers.
Suggested labels: `area-Setup`, `enhancement`.
Contributor guide
Research direction
Start by reading dotnet/sdk#33793 for the shared-framework and applaunch sequencing, then review #121907 and dotnet/sdk#52888 for the related download and dependency behavior. The work is complete when an additional clearly named runtime installer covers Microsoft.NETCore.App, Microsoft.WindowsDesktop.App, and Microsoft.AspNetCore.App for framework-dependent apps.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp
- Domain
- infrastructure, release
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100