microsoft/aspire · error · InvalidOperationException
Unknown solver type ' ' on issuer ' '.
Error message
Unknown solver type '{solver.GetType().Name}' on issuer '{issuer.Name}'. What it means
AppendSolver renders each challenge solver into the ClusterIssuer manifest YAML and switches on the solver's concrete type. An unrecognized solver type hits the default arm and throws InvalidOperationException naming the type and issuer, since Aspire cannot emit YAML for it.
Solutions
- Use the supported solver extension, e.g. WithHttp01Solver().
- If you need DNS-01, use a supported DNS solver extension rather than a custom solver object.
- Align package versions so solver types match the manifest generator.
- Extend AppendSolver/manifest generation if you own a custom solver type.
Example fix
// before issuer.Solvers.Add(new MyCustomDnsSolver()); // after issuerBuilder.WithHttp01Solver();
Defensive patterns
Strategy: type-guard
Validate before calling
if (solver is not Http01Solver) throw new InvalidOperationException($"Solver type {solver.GetType().Name} not supported"); Type guard
bool IsSupportedSolver(object solver) => solver is Http01Solver;
Try / catch
try { await manifestBuilder.BuildAsync(); }
catch (InvalidOperationException ex) when (ex.Message.StartsWith("Unknown solver type")) { /* replace custom solver with WithHttp01Solver */ throw; } Prevention
- Add solvers only via supported extension methods like WithHttp01Solver().
- Avoid custom solver implementations unless you also extend manifest generation.
When it happens
Trigger: An issuer's Solvers collection contains a solver implementation unknown to AppendSolver — typically a custom solver added by user code or a type introduced by a newer package version than the publisher supports.
Common situations: Writing a custom WithDns01-style extension that adds a bespoke solver object, or a version mismatch where a solver type was added in a newer Aspire version than the one generating the manifest.
Related errors
- ClusterIssuer ' ' has no solvers configured. Add at least…
- Unknown issuer spec type
- cert-manager resource name
- ClusterIssuer ' ' has no spec. Configure it with…
- Gateway ' ' is in Kubernetes environment ' ' but issuer ' '…
AI-assisted analysis of microsoft/aspire@25830f84bd (2026-09-16).
Data as JSON: /api/errors/15fb7bddc0d06836.
Report an issue: GitHub.
Appendix: source
Thrown at src/Aspire.Hosting.Kubernetes/CertManagerExtensions.cs:667
issuer.Name,
certManager.Parent.Name,
issuer.Name);
return;
}
sb.AppendLine(" parentRefs:");
foreach (var gateway in parentGateways)
{
sb.AppendLine(" - group: gateway.networking.k8s.io");
sb.AppendLine(" kind: Gateway");
// Match the metadata.name normalization used by BuildGatewayObjects so
// the parentRef resolves to the actual Gateway in the cluster.
sb.Append(" name: ").AppendLine(gateway.Name.ToKubernetesResourceName());
}
break;
}
default:
throw new InvalidOperationException(
$"Unknown solver type '{solver.GetType().Name}' on issuer '{issuer.Name}'.");
}
}
}
View on GitHub (pinned to 25830f84bd)