A minimalist cross‑platform (Windows / macOS) graphical user interface that wraps the official dotnet-core-uninstall command‑line utility from Microsoft.
This project is a community UI helper. It is not an official Microsoft application. Uninstalling SDKs/runtimes can impact existing projects—read the safety notes below.
Managing many installed .NET SDK and runtime versions becomes cumbersome. The official dotnet-core-uninstall tool provides the correct uninstall logic and safety rules (e.g. protecting required or currently in‑use SDKs), but it is console-only. This UI layers discoverability, visual status, and one‑click removal while preserving the tool’s rules.
- Detects and lists installed .NET SDKs & runtimes using the same logic of
dotnet-core-uninstall(including uninstallability reasons). - Shows architecture, uninstallability, and reason (e.g. "Cannot uninstall SDK that is required...").
- One click uninstall.
- UI locking during operations to prevent re-entrancy.
- Status + error surface; reasons shown as tooltip and inline text.
.NET SDKs/runtimes of supported versions (8+ right now) on Windows/macOS. Older .NET versions are supported in best-effort mode.
- Launch this app.
- Review the listed SDKs & runtimes.
- Uninstall an entry by pressing Uninstall (button is disabled if the reason indicates it is not allowed).
- The UI locks and shows progress; when done, the list refreshes automatically.
- This UI only surfaces what the underlying tool allows. If the command line would refuse an uninstall, the UI should also reflect that.
- Always confirm you do not need a version for active projects or global build servers.
- If something fails, consider running the
dotnet-core-uninstalltool manually for verbose diagnostics. - Not affiliated with Microsoft. Use at your own risk.
The distributed macOS builds are currently not code signed or notarized. Gatekeeper blocks first launch with:
"DotUninstall" cannot be opened because the developer cannot be verified.
Choose one method to allow it:
- Right‑click the app bundle (
DotUninstall (arm64).apporDotUninstall (x64).app) and select Open, then Open again in the dialog (Gatekeeper remembers). - Double‑click (blocked), then open System Settings → Privacy & Security, click Allow Anyway, relaunch and confirm.
- Remove the quarantine flag (CLI approach):
xattr -d com.apple.quarantine "/Applications/DotUninstall (arm64).app" # adjust path if placed elsewhere- (Optional) Ad‑hoc sign locally to silence further warnings:
codesign --force --deep --sign - "/Applications/DotUninstall (arm64).app"
spctl --assess --verbose "/Applications/DotUninstall (arm64).app" # should report 'accepted'Compute SHA256 and compare with the value posted on the release page:
shasum -a 256 "DotUninstall-macos-<version>.dmg"Proceed only if the hash matches. Always download from the official GitHub Releases page.
- Removing quarantine or self‑signing trusts current contents; re‑download for updates rather than modifying internals.
- Organizations can re‑sign/notarize internally if required.
If you installed .NET SDKs/runtimes system-wide (typically under /usr/local/share/dotnet) some uninstall operations require elevated rights. The app will prompt for your password via a standard macOS dialog when needed.
Release binaries are available on the Releases page.
From repository root:
git submodule update --init --recursive
dotnet build DotNetUninstall/DotNetUninstall.csproj -c Debug
dotnet run --project DotNetUninstall/DotNetUninstall.csprojDotNetUninstall/
App.xaml / App.xaml.cs - Application bootstrap (Uno single-project)
Presentation/ - UI pages, view models, converters
Models/ - Data record for install entries
ReadMe.md - This document
Strings are currently inline. Future enhancement: move UI labels and status messages into resource files for easy translation.
- Custom filtering and sorting.
- Theming toggle and high contrast improvements.
- Optional confirmation dialog before uninstall.
- Light telemetry (opt-in) for which commands are used (never collecting personal data).
- Linux support.
The app enriches entries with lifecycle & latest info. In offline or restricted environments it falls back to an embedded snapshot and/or a local disk cache. See the contributor documentation for full details, update scripts, cache TTL, and CI automation:
PRs and issues welcome. Please:
- Open an issue describing the change.
- Keep UI changes accessible (keyboard navigation & contrast).
This project is licensed under the MIT License. You are free to use, modify, and distribute with attribution and inclusion of the license text.
- Microsoft
dotnet-core-uninstallteam for the underlying logic. - Uno Platform for cross-platform UI.

