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.
error NETSDK1147: To build this project, the following workloads must be installed: wasm-tools
To install these workloads, run the following command: dotnet workload restoreCommon 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.
dotnet workload restore
dotnet build -c ReleaseInstall the specific workload
Install the named workload directly when you know which one is missing.
dotnet workload install wasm-tools
# verify
dotnet workload listHow to prevent it
- Run
dotnet workload restoreas 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.