Skip to content
Latchkey

dotnet "workload(s) not installed" - Fix NETSDK1147 in CI

The project needs an optional .NET workload (MAUI, Android, WebAssembly tools, etc.) that is not installed on the runner. The build stops with NETSDK1147 until the workload is added.

What this error means

Build fails with NETSDK1147 listing one or more workloads that must be installed (e.g. wasm-tools, maui-android). It is deterministic. The workload is simply absent on the runner.

dotnet build output
error NETSDK1147: To build this project, the following workloads must be installed: wasm-tools
To install these workloads, run the following command: dotnet workload restore

Common causes

Optional workload not present on the runner

Workloads like MAUI, Android, iOS, or wasm-tools are not part of the base SDK install and must be added explicitly.

Workload version mismatch with the SDK

An installed workload pinned to a different SDK band may be reported as not installed for the current SDK.

How to fix it

Restore workloads from the project

Let the SDK install exactly what the project manifest requires.

Terminal
dotnet workload restore
dotnet build -c Release

Install the specific workload

Install the named workload directly when you know which one is missing.

Terminal
dotnet workload install wasm-tools
# verify
dotnet workload list

How to prevent it

  • Run dotnet workload restore as an early CI step for projects that use workloads.
  • Pin the SDK so workload bands stay consistent across runs.
  • Cache the workload install where the runner allows it to speed up builds.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →