dotnet/wpf · error · InvalidOperationException
SR.MissingNameResolver
Error message
SR.MissingNameResolver
What it means
ReferenceExtension.ProvideValue throws InvalidOperationException (SR.MissingNameResolver) when the serviceProvider does not return an IXamlNameResolver for typeof(IXamlNameResolver). The {x:Reference} markup extension resolves names at parse time and is meaningless without that service. It also null-guards the serviceProvider itself with ArgumentNullException.
Solutions
- Invoke ProvideValue within a XAML load pipeline that supplies IXamlNameResolver (XamlXmlLoader / WPF parser).
- For custom hosts, register an IXamlNameResolver implementation in the service provider passed to ProvideValue.
- Never pass null serviceProvider; construct a provider exposing at least IXamlNameResolver.
Example fix
// before
new ReferenceExtension("btnOk").ProvideValue(new EmptyServiceProvider()); // throws
// after
var provider = new ServiceProviderBuilder().AddXamlNameResolver(nameScope).Build();
var value = new ReferenceExtension("btnOk").ProvideValue(provider); Defensive patterns
Strategy: type-guard
Validate before calling
if (serviceProvider is null) throw new ArgumentNullException(nameof(serviceProvider));
if (serviceProvider.GetService(typeof(IXamlNameResolver)) is not IXamlNameResolver) throw new InvalidOperationException("IXamlNameResolver missing from provider"); Type guard
bool CanResolveReference(IServiceProvider sp) => sp?.GetService(typeof(IXamlNameResolver)) is IXamlNameResolver;
Try / catch
try { var v = referenceExt.ProvideValue(provider); }
catch (InvalidOperationException ex) when (ex.Message == SR.MissingNameResolver) { /* evaluate outside XAML — resolve by other means */ } Prevention
- Evaluate x:Reference only during XAML loading where name scopes exist.
- For tooling that walks markup extensions, supply a stub IXamlNameResolver in the service provider.
- Never pass a bare or empty IServiceProvider to ProvideValue.
When it happens
Trigger: Calling ProvideValue with a null serviceProvider (ArgumentNullException), or with a service provider that lacks IXamlNameResolver — e.g. outside XAML parsing, in design-time tooling, or with a custom provider missing the service.
Common situations: Evaluating markup extensions programmatically with a minimal IServiceProvider; XAML processed outside the normal loader (preview/render tools); tests instantiating ReferenceExtension and calling ProvideValue with stub providers.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
Related errors
- SR.Format(SR.MarkupExtensionNoContext, GetType().Name…
- SR.MissingNameProvider
- SR.MissingNameResolver
- NotImplementedException
- SR.Format(SR.DeferringLoaderNoContext…
AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14).
Data as JSON: /api/errors/2841e99e76c185a2.
Report an issue: GitHub.
Appendix: source
Thrown at src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Windows/Markup/Reference.cs:30
{
public Reference()
{
}
public Reference(string name)
{
Name = name;
}
[ConstructorArgument("name")]
public string Name { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
ArgumentNullException.ThrowIfNull(serviceProvider);
if (serviceProvider.GetService(typeof(IXamlNameResolver)) is not IXamlNameResolver nameResolver)
{
throw new InvalidOperationException(SR.MissingNameResolver);
}
if (string.IsNullOrEmpty(Name))
{
throw new InvalidOperationException(SR.MustHaveName);
}
object obj = nameResolver.Resolve(Name);
if (obj is null)
{
string[] names = new string[] { Name };
obj = nameResolver.GetFixupToken(names, true);
}
return obj;
}
}
}View on GitHub (pinned to 81131a70a4)