| Previous | Next |
| WCM_E_EXPRESSIONNOTFOUND | WCM_E_USERALREADYREGISTERED |
WCM_E_SUBSTITUTIONNOTFOUND
The Windows SDK describes the condition as “Substitution is not defined.”
Interpretation without overreach
A named substitution cannot be resolved. The operation reached manifest expansion where a placeholder or reusable substitution must be bound before validation. The first branch to test is whether the substitution table was not included in the source package; keep that separate from the possibility that a placeholder name changed without updating consumers.
SMI object or metadata state
At this boundary, capture the unresolved substitution name and source location, then correlate it with all substitution declarations visible in the compilation scope. Assign ownership only after checking package/merge order and conditional preprocessing output.
Common origins
- the substitution table was not included in the source package
- a placeholder name changed without updating consumers
- scope rules place the definition outside the requesting metadata unit
- a build-time variable was expected but the tool emitted an unresolved SMI substitution
Useful artifacts
- the unresolved substitution name and source location
- all substitution declarations visible in the compilation scope
- package/merge order and conditional preprocessing output
- target architecture or language branches that select different substitutions
- the final manifest passed to SMI rather than the template source alone
How to isolate the defect
- supply the missing definition in the correct scope
- remove stale placeholder usage from generated metadata
- make architecture/language branches produce complete substitution sets
- Validate the expanded manifest as an artifact
- Add packaging tests that reject unresolved substitutions
When another attempt is justified
Retry after definition or scope correction. Supplying a setting value does not replace missing manifest substitution metadata.
Related result codes
WCM_E_EXPRESSIONNOTFOUND concerns an executable/conditional expression symbol; SUBSTITUTIONNOTFOUND concerns an expansion binding.
Example from an offline image
An architecture-specific package defines a path substitution only for x64, but the neutral manifest references it for all targets. The x86 compile cannot resolve the placeholder.
Official Microsoft references.
Looking for a different code? Search another status or error code.