Skip to content

dotnetup walkthrough - ux & graphical improvements#53464

Merged
nagilson merged 172 commits intodotnet:release/dnupfrom
nagilson:nagilson-dnup-walkthrough-ux
Apr 10, 2026
Merged

dotnetup walkthrough - ux & graphical improvements#53464
nagilson merged 172 commits intodotnet:release/dnupfrom
nagilson:nagilson-dnup-walkthrough-ux

Conversation

@nagilson
Copy link
Copy Markdown
Member

@nagilson nagilson commented Mar 14, 2026

Changes

  1. Running 'dotnetup' should initiate the walkthrough instead of exiting
  2. Double-clicking the dotnetup executable should not make it immediately bail out
  3. Add a dotnetup.config.json file which stores the decisions users made in the walkthrough so we don't ask every time
  4. Add interactivity to selecting the default install option and add the dotnetup dotnet option (Resolves dotnetup: By default, don't modify admin PATH on Windows #53076)
  5. Don't ask the user every time what version to install, Resolves dotnetup: Remove prompt for channel to install #53282
  6. Don't ask the user every time where to do the install
  7. Start predownloading in the walkthrough for what we'll need to install later (Resolves Consider Pre-Downloading in dotnetup walkthrough #52643)
  8. Add the dotnetup walkthrough command to enable changing the configuration again later (
    Resolves Separate dotnetup interactive / noninteractive modes #51584)
  9. Fix ordering and grouping of dotnetup --help
  10. Improve spacing/wording/padding and remove instances of raw json data / data structures being dumped into the terminal
  11. Add dotnetup theme colors to unify walkthrough color output
  12. Unify colors and make colors align with .net branding (purple colors)
  13. Improvements to admin installs walkthrough (resolves
    Resolves DNUP Admin Installs -> Local Installs #51101)
  14. Improvements to selection mode ui
  15. Introduction Graphic Display
  16. Adds concurrent installs and concurrent progress graphics (resolves Resolves Support dotnetup runtime install installing multiple things #52679)
  17. Shimmer animations
  18. Explanation of channels / getting started guide. (Resolves DNUP Initial Walkthrough #51100)
  19. Adds aliases 'aspnet' for aspnetcore, (Resolves dotnetup should probably accept "aspnet" as a specifier for the aspnetcore runtime #53283 )

nagilson and others added 30 commits January 12, 2026 11:39
We talked about  'shadowing' `dotnet` commands to allow users to ensure `dotnetup` always works until the product is fully integrated with `dotnet.exe` itself - such that the installers and visual studio are not able to break scenarios that rely on `dotnetup`.

I think that is important for us to provide.

This document is a first-pass on what it'd be like to actually implement that. The security portion in particular is interesting, and I'm less compelled by the proposal after trying to write it all out. Nonetheless, I wanted to see where it would take us were we to implement it. Which, I had to do some of the partial implementation so I could reason with how this would work, but that's not included here. That's in the branch `nagilson-shadow-dotnet`.

I'd appreciate having our team chat about this doc and whether we still want to do this or not, or whether there are changes that need to be made at a higher level.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1. Running 'dotnetup' should initiate the walkthrough instead of exiting
2. Double-clicking the dotnetup executable should not make it immediately bail out
3. Add a dotnetup.config.json file which stores the decisions users made in the walkthrough so we don't ask every time
4. Add interactivity to selecting the default install option and add the dotnetup dotnet option
5. Don't ask the user every time what version to install
6. Don't ask the user every time where to do the install
7. Start predownloading in the walkthrough for what we'll need to install later
8. Add the dotnetup walkthrough command to enable changing the configuration again later
9. Fix ordering and grouping of dotnetup --help
10. Improve spacing/wording/padding and remove instances of raw json data / data structures being dumped into the terminal
This analyzer helps prevent copilot from writing functions which are too long so it will naturally break them up into separate pieces.
Add dotnetup theme command to add themes
Unify colors and make colors align with .net branding (purple colors)
Improvements to admin installs walkthrough
Improvements to selection mode ui
Attempt at introductory box with dotnet bot graphic - seems buggy atm
Adds concurrent runtime installs
Also adds concurrent sdk install support scaffolding
fixes bug with path replacement
fixes bug with needing to enter to complete (bad design)
might be a problem if other text appears mid way through the install
@nagilson
Copy link
Copy Markdown
Member Author

nagilson commented Apr 8, 2026

@dsplaisted Thanks so much for this thorough review.

Every feedback item has been addressed besides the broader design discussion details mentioned here: #53464 (comment) that we didn't have a chance to discuss today.

Let's discuss whether we'd like to:

  1. Continue to review this code and then follow up on these items in a design doc / discussion
  2. Wait on this PR until we discuss more broadly
  3. Something else

@nagilson nagilson requested review from Copilot and dsplaisted April 8, 2026 21:03
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 123 out of 123 changed files in this pull request and generated 10 comments.

Comment thread test/dotnetup.Tests/SpectreDisplayHelpersTests.cs
Comment thread test/dotnetup.Tests/DotnetBotBannerTests.cs
Comment thread test/dotnetup.Tests/WalkthroughWorkflowTests.cs
Comment thread test/dotnetup.Tests/DotnetupConfigTests.cs
Comment thread src/Installer/dotnetup/Commands/Shared/UpdateWorkflow.cs
Comment thread src/Installer/dotnetup/Commands/Shared/UpdateWorkflow.cs
Comment thread src/Installer/dotnetup/Commands/Shared/UninstallWorkflow.cs
Comment thread src/Installer/dotnetup/SpectreProgressTarget.cs Outdated
Comment thread src/Installer/Microsoft.Dotnet.Installation/Internal/DotnetInstall.cs Outdated
Comment thread src/Installer/dotnetup/Commands/Dotnet/DotnetCommand.cs
nagilson and others added 4 commits April 8, 2026 15:46
The Dispose method was throwing UnauthorizedAccessException when cleaning up temp directories on Windows because hostfxr.dll could still be locked after the dotnetup process exits (loaded via LoadLibraryExW during install validation). The catch block only handled IOException, so UnauthorizedAccessException escaped and failed the test.

Fix: Add retry logic with exponential backoff (200ms-3200ms, 6 attempts) that catches both IOException and UnauthorizedAccessException. If all retries fail, log a warning instead of crashing the test.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Make ProgressTaskImpl implement IDisposable to satisfy CA1001
  (owns disposable _shimmerTimer field)
- Extract GetRootsToUpdate helper from Execute to fix MA0051
  (method was 61 lines, max allowed is 60)
- Applied dotnet format

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copy link
Copy Markdown
Member

@dsplaisted dsplaisted left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good! I finished reviewing the tests and had a few more comments on the parts I reviewed before.

Comment thread src/Installer/dotnetup/Commands/Walkthrough/WalkthroughWorkflows.cs
Comment thread src/Installer/dotnetup/dotnetup.csproj Outdated
</ItemGroup>

<ItemGroup>
<PackageReference Include="Meziantou.Analyzer" PrivateAssets="all" IncludeAssets="runtime; build; native; contentfiles; analyzers" />
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this will still break source build. It will still try to download the package during NuGet restore and that will either fail or trigger a prebuilt error or something (I think).

Comment thread test/dotnetup.Tests/DotnetupConfigTests.cs Outdated
Comment thread test/dotnetup.Tests/DotnetupConfigTests.cs Outdated
Comment thread test/dotnetup.Tests/InstallWorkflowTests.cs Outdated
Comment thread test/dotnetup.Tests/ManifestTests.cs Outdated
Comment thread test/dotnetup.Tests/WalkthroughWorkflowTests.cs Outdated
Comment thread test/dotnetup.Tests/WalkthroughWorkflowTests.cs Outdated
design changes will be implemented hereafter because further churn in this PR is inefficient to review
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants