winget failed installing an app because "Failed to install dependency"? Here's why this happens and 5 ways to fix it.
What "dependency" means in winget
Some packages declare dependencies — other winget packages that must be installed first. Common dependencies:
- Microsoft.DotNet.Runtime.X — .NET runtime versions
- Microsoft.VCRedist.YYYY.x64 — Visual C++ runtimes
- Microsoft.EdgeWebView2 — embedded browser engine
- Microsoft.WindowsTerminal — for apps that need it as a host
- OpenJS.NodeJS — for Node-based desktop apps
When you winget install Some.App, winget tries to install all declared dependencies first. If any dependency install fails, the main install aborts.
Fix 1 — Install dependencies manually
First, see what dependencies the package needs:
winget show --id Some.App
Look at the Dependencies section:
Dependencies:
Microsoft.DotNet.Runtime.8 >= 8.0.0
Microsoft.VCRedist.2015+.x64 >= 14.40.33810.0
Install each one:
winget install --id Microsoft.DotNet.Runtime.8
winget install --id Microsoft.VCRedist.2015+.x64
Then install the main app:
winget install --id Some.App
Often the dependency install fails because of a different bug (architecture mismatch, network issue) and you can debug that in isolation.
Fix 2 — Use --skip-dependencies
If you've already installed the dependencies yourself (manually or via Windows Update), skip the check:
winget install --id Some.App --skip-dependencies
winget proceeds with the main install and doesn't verify dependencies. Risky if dependencies are actually missing — the app may install but crash at first launch.
Fix 3 — Update Microsoft Edge WebView2
A surprisingly common dependency. Many modern apps embed WebView2. If it's outdated or missing:
winget install --id Microsoft.EdgeWebView2 --force
Then retry the main app install.
Fix 4 — Install .NET runtime versions
Many apps need a specific .NET runtime. The error usually says which:
Microsoft.DotNet.Runtime.8 failed
Install it explicitly:
winget install --id Microsoft.DotNet.Runtime.8
If that fails with "no installer found", you may be on an unsupported architecture (32-bit, ARM legacy). Force x64:
winget install --id Microsoft.DotNet.Runtime.8 --architecture x64
Fix 5 — Install VC++ Redistributables
Visual C++ Redistributables are mostly invisible but required by many apps. Install all of them once:
winget install --id Microsoft.VCRedist.2015+.x64
winget install --id Microsoft.VCRedist.2015+.x86
winget install --id Microsoft.VCRedist.2012.x64
winget install --id Microsoft.VCRedist.2012.x86
winget install --id Microsoft.VCRedist.2010.x64
winget install --id Microsoft.VCRedist.2010.x86
Then retry your main install.
Specific dependency errors
"Microsoft.DotNet.Runtime.8 failed to install"
.NET 8 install failed. Check if it's actually needed (some apps work with 7 or 9):
winget show --id Some.App
If the dependency is >= 8.0.0, try .NET 9:
winget install --id Microsoft.DotNet.Runtime.9
Some apps accept newer runtime versions; some don't. If the app still fails after install, you genuinely need exactly version 8 — try downloading manually from dotnet.microsoft.com.
"EdgeWebView2 failed"
Microsoft Edge WebView2 install can fail if Edge itself is broken. Reset Edge:
Get-AppxPackage Microsoft.MicrosoftEdge | Reset-AppxPackage
Then retry:
winget install --id Microsoft.EdgeWebView2 --force
"Failed to install required Visual C++ runtime"
The VC++ installer requires Windows Update prerequisites. Run:
sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth
Then retry the dependency install.
"Dependency not found"
The dependency ID in the manifest doesn't exist in the catalog. Often a typo or removed package. Skip:
winget install --id Some.App --skip-dependencies
Then install dependencies manually if known.
Reverse-look up: which apps depend on this?
If you need to know what would break by uninstalling a dependency:
winget search --tag dependency
Or for specific dependencies, check the GitHub manifests:
github.com/microsoft/winget-pkgs/search?q=Microsoft.DotNet.Runtime.8
Pre-install everything common at once
Bootstrap a new machine by installing the most common dependencies upfront:
$deps = @(
"Microsoft.DotNet.Runtime.6",
"Microsoft.DotNet.Runtime.7",
"Microsoft.DotNet.Runtime.8",
"Microsoft.DotNet.Runtime.9",
"Microsoft.DotNet.AspNetCore.8",
"Microsoft.VCRedist.2015+.x64",
"Microsoft.VCRedist.2015+.x86",
"Microsoft.VCRedist.2012.x64",
"Microsoft.VCRedist.2010.x64",
"Microsoft.EdgeWebView2"
)
$deps | ForEach-Object {
winget install --id $_ --accept-package-agreements --accept-source-agreements
}
Run once on a new machine. Most future installs will breeze through.
When dependencies don't get cleaned up
If you uninstall an app but its dependencies linger:
winget list --source winget | Select-String "DotNet.Runtime"
Manually uninstall unused dependencies:
winget uninstall --id Microsoft.DotNet.Runtime.6
Be careful — other apps may need them. When in doubt, leave dependencies installed.
Specific scenarios
"I'm getting Failed to install dependency on EVERY install"
Network or admin issue is breaking dependency downloads. Check:
winget upgrade --all --include-unknown
If this also fails, see winget download failed fix.
"Dependency installs successfully but main app still says missing"
Reboot. Sometimes dependency registration doesn't propagate to all processes until restart.
"I want to bundle dependencies into my exported list"
winget export includes dependencies by default. On import on a clean machine:
winget import -i my-apps.json --accept-package-agreements --accept-source-agreements
Will install dependencies first, then apps.
What's next?
- No installer found matching system requirements → — sibling error
- All winget error codes → — full reference
- Winget download failed → — network errors
- Fresh Windows 11 setup → — putting it all together
